Swift专题讲解二十——扩展
一、简介
Swift中的扩展与Objective-C中的类别功能相似,扩展可以为一个已有的类、结构体、枚举或者协议添加新的属性或方法,与Objective-C的类别不同的是,Swift中的扩展没有名称。
Swift中的扩展支持如下功能:
1.添加计算属性
2.定义实例方法和类型方法
3.定义新的构造方法
4.定义下标方法
5.定义嵌套类型
6.使一个已有的类遵守协议
7.对协议进行扩展添加新的方法
二、使用扩展添加计算属性
使用extension来声明扩展,示例代码如下:
1//创建一个类 有两个属性 2class MyClass { 3 var name:String 4 var age:Int 5 init(){ 6 name = "HS" 7 age = 24 8 } 9} 10//为MyClass类扩展一个计算属性 11extension MyClass { 12 var nameAndAge:String{ 13 return "\(name)"+"\(age)" 14 } 15} 16var obj = MyClass() 17obj.nameAndAge
三、使用扩展添加构造方法
需要注意的是,扩展不能为类添加指定构造方法,只可以为其添加便利构造方法,示例代码如下:
1//创建一个类 有两个属性 2class MyClass { 3 var name:String 4 var age:Int 5 init(){ 6 name = "HS" 7 age = 24 8 } 9} 10extension MyClass{ 11 convenience init(name:String,age:Int){ 12 self.init() 13 self.name=name 14 self.age=age 15 } 16} 17var obj2 = MyClass(name: "ZYH", age: 24)
四、使用扩展添加实例方法与类型方法
扩展可以为一个类型添加实例方法与类型方法,示例如下:
1//创建一个类 有两个属性 2class MyClass { 3 var name:String 4 var age:Int 5 init(){ 6 name = "HS" 7 age = 24 8 } 9} 10 11extension MyClass{ 12 func logName() -> String { 13 print(name) 14 return name 15 } 16 class func logClassName(){ 17 print("MyClass") 18 } 19} 20 21var obj3 = MyClass() 22obj3.logName() 23MyClass.logClassName()
对于值类型的扩展,可以使用可变方法来修改实例本身,示例如下:
1extension Int{ 2 //修改本身需要使用nutating 3 mutating func change() { 4 self = self*self 5 } 6} 7var count = 3 8count.change() 9//打印9 10print(count)
专注技术,热爱生活,交流技术,也做朋友。
——珲少 QQ群:203317592