Swift 扩展

前言

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

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

原文地址:https://www.cnblogs.com/QianChia/p/8655153.html