数组 – 是否可以在Swift中创建一个限制为一个类的数组扩展?

数组 – 是否可以在Swift中创建一个限制为一个类的数组扩展?,第1张

概述我可以创建一个适用于例如字符串的数组扩展吗? 从 Swift 2开始,现在可以通过协议扩展来实现, 它为符合类型提供方法和属性实现 (可选择受其他约束限制). 一个简单的例子:为所有符合的类型定义一个方法 到SequenceType(例如Array),其中sequence元素是String: extension SequenceType where Generator.Element == Str 我可以创建一个适用于例如字符串的数组扩展吗? 从 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

无法直接为struct Array定义扩展方法,但仅适用于所有类型
符合某些协议(带有可选约束).所以一个
必须找到一个符合Array的协议,并提供所有必要的方法.在上面的示例中,即SequenceType.

另一个例子(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的扩展,因为需要下标访问元素,元素是要求是可比较的.

总结

以上是内存溢出为你收集整理的数组 – 是否可以在Swift中创建一个限制为一个类的数组扩展?全部内容,希望文章能够帮你解决数组 – 是否可以在Swift中创建一个限制为一个类的数组扩展?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存