如何在通用数组的Swift中使用reduce函数?

时间:2018-11-23 06:16:40

标签: arrays swift generics

我有这样的通用数组-

let array = arrayOfElements as! [T]

我想使用swift的default(reduce)函数添加数组元素。

我该怎么做?

我正在使用以下内容-

let result = array.reduce(0,+)

它显示对成员'+'的错误含糊的引用

2 个答案:

答案 0 :(得分:2)

您怎么知道T是可以添加的类型? T可以是任何东西,不是吗?如果TBool怎么办?当然不能添加TrueFalse值。

要添加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 }}来完成这项工作