随着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)")