<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>

(adsbygoogle=window.adsbygoogle||[]).push({})

<!–
–>

前言

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

    • 扩展可以用来扩展现有类型的计算属性、构造器、方法和下标。
    • 不能添加一个已经存在的方法或者属性。
    • 添加的属性不能是存储属性,只能是计算属性。
  • 在定义扩展时,在类型名前使用关键字 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 协议” 章节。

<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>
<!–

–>

(adsbygoogle=window.adsbygoogle||[]).push({})
ICP+EDI电信增值业务许可证申请审核网站源码

扫码联系技术微信【备注:站媒体网】
客服QQ:137483024