数组 – 是否可以在Swift中创建一个限制为一个类的数组扩展?
发布时间:2020-12-14 05:26:11 所属栏目:百科 来源:网络整理
导读:我可以创建一个适用于例如字符串的数组扩展吗? 从 Swift 2开始,现在可以通过协议扩展来实现, 它为符合类型提供方法和属性实现 (可选择受其他约束限制). 一个简单的例子:为所有符合的类型定义一个方法 到SequenceType(例如Array),其中sequence元素是String
我可以创建一个适用于例如字符串的数组扩展吗?
从
Swift 2开始,现在可以通过协议扩展来实现, 它为符合类型提供方法和属性实现 (可选择受其他约束限制). 一个简单的例子:为所有符合的类型定义一个方法 extension SequenceType where Generator.Element == String { func joined() -> String { return "".join(self) } } let a = ["foo","bar"].joined() print(a) // foobar 无法直接为struct Array定义扩展方法,但仅适用于所有类型 另一个例子(How do I insert an element at the correct position into a sorted array in Swift?的变种): extension CollectionType where Generator.Element : Comparable,Index : RandomAccessIndexType { typealias T = Generator.Element func insertionIndexOf(elem: T) -> Index { var lo = self.startIndex var hi = self.endIndex while lo != hi { // mid = lo + (hi - 1 - lo)/2 let mid = lo.advancedBy(lo.distanceTo(hi.predecessor())/2) if self[mid] < elem { lo = mid + 1 } else if elem < self[mid] { hi = mid } else { return mid // found at position `mid` } } return lo // not found,would be inserted at position `lo` } } let ar = [1,3,5,7] let pos = ar.insertionIndexOf(6) print(pos) // 3 这里的方法被定义为CollectionType的扩展,因为需要下标访问元素,元素是要求是可比较的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |