作为练习,我正在尝试Array
在 Swift 中进行扩展以添加sum()
成员函数。这应该是类型安全的,我希望sum()
仅当数组包含可以添加的元素时才调用编译。
我尝试了一些这样的变体:
extension Array {
func sum<U : _IntegerArithmeticType where U == T>() -> Int {
var acc = 0
for elem in self {
acc += elem as Int
}
return acc
}
}
这个想法是说,“好吧,这是一个泛型函数,泛型类型必须类似于Int
,并且还必须与T
数组元素的类型相同”。但是编译器抱怨:“相同类型的要求使泛型参数 U 和 T 等效”。没错,他们应该是,加上额外的约束T : _IntegerArithmeticType
。
为什么编译器不让我这样做?我该怎么做?
(我知道我应该稍后修复事物是如何相加的以及返回类型到底是什么,但我现在被困在类型约束上。)