在我第一次尝试理解泛型函数的前提下,我想知道下面的代码(Swift 3)有什么问题:
func isTgreatherthanU<T: Comparable, U: Comparable>(t: T, u: U) -> Bool {
return t > u
}
(我知道这是一个愚蠢的功能,但它只是为了理解如何编写通用代码。)
编译器说:
二元运算符&#39;&gt;&#39;不能应用于&#39; T&#39;类型的操作数。和&#39; U&#39;
我认为,通过声明T
和U
符合Comparable协议,代码应该有效,但我显然做错了什么......任何想法?< / p>
答案 0 :(得分:4)
可以将Comparable
类型的值与另一个值进行比较
相同类型。在您的情况下,T
和U
无关
可能还有不同的类型。例如,您无法将String
与Int
进行比较
即使两种类型都是Comparable
。
你想要的是
func isTgreatherthanU<T: Comparable>(t: T, u: T) -> Bool {
return t > u
}
即。两个参数都是相同类型T
的值。
答案 1 :(得分:2)
Swift标准库仅实现像>
这样的二元运算符来比较两个相同类型的对象。 T
和U
符合Comparable
,但它们可能有两种不同的类型。 Swift认为T
和U
是不同的类型,无论它们符合哪种协议。
只有这样的东西才有效:
func isTgreatherthanU<T: Comparable>(t: T, u: T) -> Bool {
return t > u
}