前言
-
扩展就是给一个现存类、结构体、枚举或者协议添加新的属性或者方法,无需修改目标的源代码,就可以把想要的代码加到目标上面。
- 扩展可以用来扩展现有类型的计算属性、构造器、方法和下标。
- 不能添加一个已经存在的方法或者属性。
- 添加的属性不能是存储属性,只能是计算属性。
-
在定义扩展时,在类型名前使用关键字
extension
。extension 某个现有类型 { // 增加新的功能 }
1、扩展计算属性
-
扩展计算属性
class Transport { var scope: String init(scope: String) { self.scope = scope } }
extension Transport { // 扩展计算属性 var extProperty: String { get { return scope } } }
var myTrans = Transport(scope: "ludi") print(myTrans.extProperty) // ludi
2、扩展构造器
-
扩展构造器
class Transport { var price = 30 var scope: String init(scope: String) { self.scope = scope } }
extension Transport { // 扩展构造器 convenience init(price: Int, scope: String) { self.init(scope: scope) self.price = price } }
var myTra1 = Transport(price: 50, scope: "ludi") // 使用扩展构造器,价格为 50 var myTra2 = Transport(scope: "haiyang") // 使用原构造器,介个属性的值仍为 30
3、扩展方法
-
使用扩展增加方法的做法非常灵活,除了可在自定义的类中扩展方法外,还可以扩展基本数据类型的方法,比如扩展整数类型。
// 扩展基本数据类型 extension Int { func calculate() -> Int { return self * 2 } }
var i = 3 i.calculate() // 6
4、扩展下标
-
扩展下标
extension Int { // 扩展下标 subscript(num: Int) -> Int { return self * num } }
var i = 3 i[2] // 6
5、扩展协议
- 详细讲解见 “Swift 协议” 章节。