如何在Swift中添加两个通用值?

Hen*_*Two 3 generics swift

我正在尝试编写一个求和一个数字类型数组的函数。据我所知:

protocol Numeric { }
extension Float: Numeric {}
extension Double: Numeric {}
extension Int: Numeric {}

func sum<T: Numeric >(array:Array<T>) -> T{
    var acc = 0.0
    for t:T in array{
        acc = acc + t
    }
    return acc
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何+Numeric协议中定义操作符的行为。

Sun*_*kas 5

protocol Numeric {
    func +(lhs: Self, rhs: Self) -> Self
}
Run Code Online (Sandbox Code Playgroud)

应该足够了。

资料来源:http : //natecook.com/blog/2014/08/generic-functions-for-incompatible-types/

  • 在Swift 4.2上,只是一个很小的补充,编译器在函数之前需要'static'关键字。协议数字{静态函数+(lhs:Self,rhs:Self)-&gt; Self} (2认同)

Swe*_*per 5

从 Swift 5 开始,有一个内置AdditiveArithmetic协议,您可以限制它:

func sum<T: AdditiveArithmetic >(array:Array<T>) -> T{
    var acc = T.zero
    for t in array{
        acc = acc + t
    }
    return acc
}
Run Code Online (Sandbox Code Playgroud)

现在您不需要手动使内置类型符合协议:)