二元运算符' +'不适用于两个T'操作数

时间:2015-12-07 02:47:18

标签: swift

我正在使用Generics添加不同的类型,如Int,Double,Float等。我使用下面的代码,但我得到错误"二元运算符' +'不适用于两个T'操作数"

func add<T>(num1: T,num2: T) -> T {
    return num1 + num2
}

3 个答案:

答案 0 :(得分:30)

Swift不知道泛型类型T有一个'+'运算符。您不能在任何类型上使用+:例如在两个视图控制器+没有太多意义

您可以使用协议一致性让swift了解您的类型!

我在操场上去了,这可能就是你要找的东西:)

protocol Addable {
    func +(lhs: Self, rhs: Self) -> Self
}

func add<T: Addable>(num1: T, _ num2: T) -> T {
    return num1 + num2
}

extension Int: Addable {}
extension Double: Addable {}
extension Float: Addable {}

add(3, 0.2)

如果您需要在此处演示的任何概念,请告诉我

答案 1 :(得分:14)

在Swift 4 / Xcode 9+中,您可以利用Numeric protocol

func add<T: Numeric>(num1: T, num2: T) -> T {
    return num1 + num2
}

print(add(num1: 3.7, num2: 44.9)) // 48.6
print(add(num1: 27, num2: 100))  // 127

使用这意味着您不必自己创建特殊协议。

这仅适用于需要Numeric协议提供的功能的情况。您可能需要执行与@adam对%和其他运算符的回答类似的操作,或者您可以在Xcode 9 SDK中利用Apple提供的其他协议。

答案 2 :(得分:1)

对于那些希望使用比较的人,例如<>等,只需告诉Swift您的通用类型就采用了可兼容协议,例如:-

func genericComparison<T: Comparable>(left: LinkedList<T>, right: LinkedList<T>) -> LinkedList<T>