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

前端之家收集整理的这篇文章主要介绍了泛型 – 在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"

猜你在找的Swift相关文章