Swift - 是否有一个定义+, - ,*,/函数的标准协议,它被所有"算法"采用。类型如Double,Float,Int等?

时间:2015-07-09 18:03:35

标签: swift generics swift2

我想编写一个通用函数,它将返回它的两个参数的总和,如下所示:

func add<T: ???>(left: T, right: T) -> T {
    return left+right
}

当然,为了使用+运算符,T类型需要符合定义+运算符的协议。

对于其他几个运营商,有内置协议 - 例如Equatable==Comparable<>等。所有Swift内置&#34;算法& #34;类型如Double,Float,Int16等。

是否存在定义+-*/运算符的标准协议,这些运算符由ALL&#34; arithmetic&#34;类型如Double,Float,Int,UInt,Int16等?

1 个答案:

答案 0 :(得分:5)

图书馆里没有任何东西,我明白你的意思。你可以自己做:

protocol Arithmetic {
    func +(lhs: Self, rhs: Self) -> Self
    func -(lhs: Self, rhs: Self) -> Self
    func *(lhs: Self, rhs: Self) -> Self
    func /(lhs: Self, rhs: Self) -> Self
}

extension Int8 : Arithmetic {}
extension Int16 : Arithmetic {}
extension Int32 : Arithmetic {}
extension Int64 : Arithmetic {}

extension UInt8 : Arithmetic {}
extension UInt16 : Arithmetic {}
extension UInt32 : Arithmetic {}
extension UInt64 : Arithmetic {}

extension Float80 : Arithmetic {}
extension Float : Arithmetic {}
extension Double : Arithmetic {}


func add<T: Arithmetic>(a: T, b: T) -> T {
    return a + b
}

add(3, b: 4)