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

猜你喜欢

转载自blog.csdn.net/die_word/article/details/81133891