栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以在Swift中进行仅限于一类的Array扩展?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以在Swift中进行仅限于一类的Array扩展?

从Swift 2开始,这可以通过 协议扩展 来实现,该 协议扩展 为符合类型的类型(可选地受其他约束限制)提供方法和属性实现。

一个简单的例子:为所有符合

SequenceType
(例如
Array
)的类型定义一个方法,其中sequence元素为
String

extension SequenceType where Generator.Element == String {    func joined() -> String {        return "".join(self)    }}let a = ["foo", "bar"].joined()print(a) // foobar

不能

structArray
直接为扩展方法定义扩展方法,而只能为符合某种协议(带有可选约束)的所有类型定义扩展方法。因此,必须找到一种协议,该协议必须
Array
遵循并提供所有必要的方法。在上面的示例中,即
SequenceType

另一个示例如何将元素的正确位置插入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
因为需要下标访问元素,并且元素必须是
Comparable



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号