首页 文章

Swift - 是否有一个定义, - ,*,/ functions的标准协议,它被Double,Float,Int等所有“算术”类型所采用? [重复]

提问于
浏览
6

这个问题在这里已有答案:

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

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

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

在其他几个运营商的情况下,有内置协议 - 例如 Equatable 用于 ==Comparable 用于 <> 等 . 这些协议被所有Swift内置的"arithmetic"类型采用,如Double,Float,Int16等 .

是否有一个标准协议定义了 +-*/ 运算符,它们被所有"arithmetic"类型采用,如Double,Float,Int,UInt,Int16等?

1 回答

  • 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)
    

相关问题