加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

泛型 – 在Swift中构造泛型类型的扩展

发布时间:2020-12-14 06:04:43 所属栏目:百科 来源:网络整理
导读:是否可能扩展一个通用类为专门/构造的通用类型?我想扩展Int数组与一个方法来计算其元素的总和。 例如 extension ArrayInt { func sum() - Int { return reduce(0) { $0 + $1 } }} 使用Swift 2,可以使用协议扩展实现(有关详细信息,请参阅 The Swift Progra
是否可能扩展一个通用类为专门/构造的通用类型?我想扩展Int数组与一个方法来计算其元素的总和。

例如

extension Array<Int> {

    func sum() -> Int {
        return reduce(0) { $0 + $1 }
    }

}
使用Swift 2,可以使用协议扩展实现(有关详细信息,请参阅 The Swift Programming Language: Protocols)。

总而言之,你可以做到:

extension SequenceType where Generator.Element == Int {
    var sum: Int {
        return reduce(0,combine: +)
    }
}

用法:

let nums = [1,2,3,4]
print(nums.sum) // Prints: "10"

或者,对于更通用的东西,你可以@Wes Campaigne建议和创建一个可添加协议:

protocol Addable {
    init()
    func + (lhs: Self,rhs: Self) -> Self
}

extension Int   : Addable {}
extension Double: Addable {}
extension String: Addable {}
// ...

接下来,扩展SequenceType以添加可添加元素的序列:

extension SequenceType where Generator.Element: Addable {
    var sum: Generator.Element {
        return reduce(Generator.Element(),combine: +)
    }
}

用法:

let doubles = [1.0,2.0,3.0,4.0]
print(doubles.sum) // Prints: "10.0"

let strings = ["a","b","c"]
print(strings.sum) // Prints: "abc"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读