Swift 扩展

前言

  • 扩展就是给一个现存类、结构体、枚举或者协议添加新的属性或者方法,无需修改目标的源代码,就可以把想要的代码加到目标上面。

    • 扩展可以用来扩展现有类型的计算属性、构造器、方法和下标。
    • 不能添加一个已经存在的方法或者属性。
    • 添加的属性不能是存储属性,只能是计算属性。
  • 在定义扩展时,在类型名前使用关键字 extension

    1
    2
    3
    4
    extension 某个现有类型 {

    // 增加新的功能
    }

1、扩展计算属性

  • 扩展计算属性

    1
    2
    3
    4
    5
    6
    7
    8
    class Transport {

    var scope: String

    init(scope: String) {
    self.scope = scope
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    extension Transport {

    // 扩展计算属性
    var extProperty: String {

    get {
    return scope
    }
    }
    }
    1
    2
    var myTrans = Transport(scope: "ludi")
    print(myTrans.extProperty) // ludi

2、扩展构造器

  • 扩展构造器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Transport {

    var price = 30

    var scope: String

    init(scope: String) {
    self.scope = scope
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    extension Transport {

    // 扩展构造器
    convenience init(price: Int, scope: String) {

    self.init(scope: scope)
    self.price = price
    }
    }
    1
    2
    var myTra1 = Transport(price: 50, scope: "ludi")    // 使用扩展构造器,价格为 50
    var myTra2 = Transport(scope: "haiyang") // 使用原构造器,介个属性的值仍为 30

3、扩展方法

  • 使用扩展增加方法的做法非常灵活,除了可在自定义的类中扩展方法外,还可以扩展基本数据类型的方法,比如扩展整数类型。

    1
    2
    3
    4
    5
    6
    7
    // 扩展基本数据类型
    extension Int {

    func calculate() -> Int {
    return self * 2
    }
    }
    1
    2
    var i = 3
    i.calculate() // 6

4、扩展下标

  • 扩展下标

    1
    2
    3
    4
    5
    6
    7
    extension Int {

    // 扩展下标
    subscript(num: Int) -> Int {
    return self * num
    }
    }
    1
    2
    var i = 3
    i[2] // 6

5、扩展协议

文章目录
  1. 1. 前言
  2. 2. 1、扩展计算属性
  3. 3. 2、扩展构造器
  4. 4. 3、扩展方法
  5. 5. 4、扩展下标
  6. 6. 5、扩展协议
隐藏目录