擴展

  1. 擴展基礎
    1. swift的擴展使用關鍵字extension
    2. swift的擴展至關於OC的分類,即只能新增方法不能新增存儲屬性。
extension Double {
    var km: Double {
        return self * 1000
    }
    
    var cm: Double {
        return self / 100.0
    }
    
    var mm: Double {
        return self / 1000.0
    }
}

var a: Double = 1000
print(a.cm)
複製代碼
  1. 構造器的擴展
    1. 枚舉類型和結構體類型只能夠有指定構造器沒有便利構造器。而類能夠有指定構造器和遍歷構造器。
    2. 類既能夠有構造器也能夠有遍歷構造器。
    3. 擴展只能夠爲枚舉類型和結構體類型擴展指定構造器,不能擴展遍歷構造器。
    4. 擴展只能給類擴展遍歷構造器,不能擴展指定構造器。
//只能給類擴展遍歷構造器
class Test {
    var name: String = ""
    init(name: String) {
        self.name = name
    }
}

extension Test {
  convenience init(nameStr: String) {
    self.init(name: nameStr)
       self.name = nameStr
    }
}

//只能給結構體,枚舉擴展指定構造器
struct TestStruct {
    var name: String
    init(name: String) {
        self.name = name
    }
}

extension TestStruct {
    init(nameStr: String) {
        self.init(name: nameStr)
        self.name = nameStr + "test"
    }
}

enum TestEnum {
    case one, two ,three
}

extension TestEnum {
    init(type: String) {
        switch type {
        case "one":
            self = .one
        case "two":
            self = .two
        case "three":
            self = .three
        default:
            self = .one
        }
    }
}

var a = TestEnum(type: "one")
複製代碼
  1. 擴展方法
    1. 能夠給結構體,類擴展實例方法,類方法。
    2. 能夠給結構體,枚舉類型擴展可變實例方法。
extension Int {
    //1. 擴展實例方法
   func repeatClosure(closure: () -> Void){
        for _ in 0..<self{
            closure()
        }
    }
    
    //2. 擴展可變實例方法 (結構體或者枚舉類型用)
    mutating func square(){
        self = self * self
    }
    
    //3. 擴展類方法
    static func sum(_ one: Int, _ two: Int) -> Int{
        return one + two
    }
}

3.repeatClosure {
    print("Hello World!")
}

var a = 3
a.square()
print(a)

print(Int.sum(3,5))
複製代碼
  1. 擴展下標
extension Int {
    subscript(num: Int) -> Int {
        var numShi = 1
        for _ in 0..<num{
            numShi *= 10
        }
        
       return (self/numShi) % 10
    }
}

var a = 123456789
print(a[0])
print(a[2])
複製代碼
  1. 擴展嵌套類型
extension Int {
    enum Kind: String {
        case negative, zero, positive
    }
    
    var kind: Kind {
        switch self {
        case 0:
            return .zero
        case let x where x > 0:
            return .positive
        default:
            return .negative
        }
    }
}

func check(numbers: [Int]) {
    for item in numbers {
        switch item.kind {
        case .negative:
            print("-", terminator: " ")
        case .zero:
            print("0", terminator: " ")
        case .positive:
            print("+", terminator: " ")
        }
    }
}

check(numbers: [3, 19, -27, 0, -6, 0, 7])
複製代碼
  1. 總結
    1. 枚舉類型的擴展
      1. 能夠給枚舉類型擴展實例方法,類方法,實例可變方法。
      2. 能夠擴展指定構造器。
      3. 能夠擴展下標
      4. 能夠擴展嵌套類型
    2. 結構體的擴展
      1. 能夠擴展計算屬性
      2. 能夠擴展實例方法,類型方法,實例可變方法。
      3. 能夠擴展指定構造器。
      4. 能夠擴展下標。
      5. 能夠擴展嵌套類型。
    3. 類的擴展
      1. 能夠擴展計算屬性。
      2. 能夠擴展實例方法,類型方法。
      3. 能夠擴展便利構造器。
      4. 能夠擴展下標
      5. 能夠擴展嵌套類型
相關文章
相關標籤/搜索