我正在使用Generics添加不同类型,如Int,Double,Float等.我使用下面的代码,但我得到错误"二元运算符'+'不能应用于两个'T'操作数".
func add<T>(num1: T,num2: T) -> T {
return num1 + num2
}
Run Code Online (Sandbox Code Playgroud) 我想写一个泛型函数,它将返回它的两个参数的总和,如下所示:
func add<T: ???>(left: T, right: T) -> T {
return left+right
}
Run Code Online (Sandbox Code Playgroud)
当然,为了使用+运算符,T类型需要符合定义+运算符的协议.
在其他几家运营商的情况下,有建于协议-例如Equatable为==,并Comparable为<,>等这些协议是由所有斯威夫特内置的"算术"类型,如双,浮法,Int16的采用等
是否有一个标准协议,定义+,-,*,/运营商,这是由ALL"算术"类型,如双,浮动,中等,UINT,Int16类型等通过?
有人知道测试三个数字是否相同的快捷方式吗?我知道这有效:
if number1 == number2 && number2 == number3 {
}
Run Code Online (Sandbox Code Playgroud)
但我想要更干净的东西,比如;
if number1 == number2 == number3 {
}
Run Code Online (Sandbox Code Playgroud)
这是非常重要的,因为我正在比较许多不同的价值观.
我有这个功能要从两个数字计算斜边
func hypotenusa<T>(nr1: T, nr2: T) -> T {
return sqrt( pow(nr1, 2) + pow(nr2, 2) )
}
// v Simpler situation v
func addition<T>(nr1: T, nr2: T) -> T {
return nr1 + nr2
}
Run Code Online (Sandbox Code Playgroud)
我想使用泛型,所以我不必为此分别使用Int,Float,Double制作3个副本
但这是行不通的,我认为泛型真的很难使用,请帮助我:)