是否可能扩展一个通用类为专门/构造的通用类型?我想扩展Int数组与一个方法来计算其元素的总和。
例如
extension Array<Int> { func sum() -> Int { return reduce(0) { $0 + $1 } } }
使用Swift 2,可以使用协议扩展实现(有关详细信息,请参阅
The Swift Programming Language: Protocols)。
原文链接:/swift/321063.html总而言之,你可以做到:
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"