我正在使用Generics添加不同的类型,如Int,Double,Float等。我使用下面的代码,但我得到错误"二元运算符' +'不适用于两个T'操作数"
func add<T>(num1: T,num2: T) -> T {
return num1 + num2
}
答案 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>