Swift中的扩展与Objective-C中的类别功能类似,扩展能够为一个已有的类、结构体、枚举或者协议添加新的属性或方法,与Objective-C的类别不一样的是,Swift中的扩展没有名称。javascript
Swift中的扩展支持以下功能:java
1.添加计算属性spa
2.定义实例方法和类型方法code
3.定义新的构造方法ip
4.定义下标方法it
5.定义嵌套类型io
6.使一个已有的类遵照协议class
7.对协议进行扩展添加新的方法扩展
使用extension来声明扩展,示例代码以下:方法
//建立一个类 有两个属性 class MyClass { var name:String var age:Int init(){ name = "HS" age = 24 } } //为MyClass类扩展一个计算属性 extension MyClass { var nameAndAge:String{ return "\(name)"+"\(age)" } } var obj = MyClass() obj.nameAndAge
须要注意的是,扩展不能为类添加指定构造方法,只能够为其添加便利构造方法,示例代码以下:
//建立一个类 有两个属性 class MyClass { var name:String var age:Int init(){ name = "HS" age = 24 } } extension MyClass{ convenience init(name:String,age:Int){ self.init() self.name=name self.age=age } } var obj2 = MyClass(name: "ZYH", age: 24)
扩展能够为一个类型添加实例方法与类型方法,示例以下:
//建立一个类 有两个属性 class MyClass { var name:String var age:Int init(){ name = "HS" age = 24 } } extension MyClass{ func logName() -> String { print(name) return name } class func logClassName(){ print("MyClass") } } var obj3 = MyClass() obj3.logName() MyClass.logClassName()
对于值类型的扩展,能够使用可变方法来修改实例自己,示例以下:
extension Int{ //修改自己须要使用nutating mutating func change() { self = self*self } } var count = 3 count.change() //打印9 print(count)
专一技术,热爱生活,交流技术,也作朋友。
——珲少 QQ群:203317592