gpt4 book ai didi

generics - Swift 中构造泛型类型的扩展

转载 作者:IT王子 更新时间:2023-10-29 04:59:58 25 4
gpt4 key购买 nike

是否可以为专门化/构造的泛型类型扩展泛型类?我想用一种方法来扩展 Int Arrays 来计算其元素的总和。

例如

extension Array<Int> {

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

}

最佳答案

这可以使用协议(protocol)扩展来实现(有关更多信息,请参阅 The Swift Programming Language: Protocols)。

要对 Int 求和,您可以这样做:

extension Sequence where Iterator.Element == Int {
var sum: Int {
return reduce(0, +)
}
}

用法:

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

或者,对于更通用的东西(Swift 5),您可以使用 AdditiveArithmetic:

extension Sequence where Iterator.Element: AdditiveArithmetic {
var sum: Iterator.Element {
return reduce(.zero, +)
}
}

对于 Swift 4 及以下版本,您可以使用@Wes Campaigne 建议的内容并创建一个 Addable 协议(protocol):

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

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

接下来,扩展 Sequence 以添加 Addable 元素的序列:

extension Sequence where Iterator.Element: Addable {
var sum: Iterator.Element {
return reduce(Iterator.Element(), +)
}
}

用法:

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"

关于generics - Swift 中构造泛型类型的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com