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

是否可能扩展一个通用类为专门/构造的通用类型?我想扩展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"

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...