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