天天看點

Swift4.1新特性1之泛型加強

随着Xcode 9.4.1的跟新,Swift 4.1版本以及iOS 11.4也随之進行跟新和擴充。跟新的内容主要是圍繞着泛型加強進行完善和擴充

swift中的array是一個泛型的結構體類型,它有一個為element的類型參數。如果我們對array實作Equatable 協定,那麼前提條件是其元素element也要支援内容與位址比較。這樣我們才能為array建立判斷元素是否相等的擴張方法

extension Array: Equatable where Element: Equatable {
  static func isEqual (element: Array<Element>,  currentElement: Array<Element>) -> Bool {
    /*進行比較元素是否相等*/
   return true
  }
}
           

但是遺憾的是此代碼在swift4.1中是無法通過編譯的

Extension of type 'Array' with constraints cannot have an inheritance clause

這裡的Equatable冒犯了編譯器,有where條件的擴充就不能含有繼承的句子

swift4.1中對這一特性進行了加強,使得這一個特性被加強

例如比較兩個數組是否相同

extension Array:Equatable where Element:Equatable {
    // 比較兩個數組是否相投
    static func compareElement(element:Array<Element>, currentElement:Array<Element>) -> Bool {
        if element == currentElement {
            return true
        } else {
            return false
        }
    }
}

let array:Array<String> = ["1","2"]
        let array1:Array<String> = ["1","3"]
        let bool:Bool = Array.compareElement(element: array, currentElement: array1)
        print("bool = \(bool)")