我有这样的通用数组-
let array = arrayOfElements as! [T]
我想使用swift的default(reduce)函数添加数组元素。
我该怎么做?
我正在使用以下内容-
let result = array.reduce(0,+)
它显示对成员'+'的错误含糊的引用
答案 0 :(得分:2)
您怎么知道T
是可以添加的类型? T
可以是任何东西,不是吗?如果T
是Bool
怎么办?当然不能添加True
和False
值。
要添加T
,必须限制T
的可能类型范围。 T
必须符合Numeric
协议。由于Numeric
协议定义了+
运算符,因此我们可以确定T
是什么,只要它符合Numeric
,就可以添加它。
您可以执行以下操作:
func sum<T: Numeric>(_ array: [T]) -> T {
return array.reduce(0, +)
}
或扩展名:
extension Sequence where Element : Numeric {
func sum() -> Element {
return reduce(0, +)
}
}
请注意,在两种情况下,我都设置了: Numeric
约束。
答案 1 :(得分:1)
您不能。 T可以是任何类型,包括没有+运算符和/或不能从整数文字0创建的类型。这些要求由数字协议提供,因此您可以将类型参数定义为{{1 }}来完成这项工作