我正在尝试编写一个求和一个数字类型数组的函数。据我所知:
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协议中定义操作符的行为。
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 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)
现在您不需要手动使内置类型符合协议:)
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |