Swift 3中的泛型函数问题

时间:2017-01-05 15:07:23

标签: swift function generics

在我第一次尝试理解泛型函数的前提下,我想知道下面的代码(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;

我认为,通过声明TU符合Comparable协议,代码应该有效,但我显然做错了什么......任何想法?< / p>

2 个答案:

答案 0 :(得分:4)

可以将Comparable类型的值与另一个值进行比较 相同类型。在您的情况下,TU无关 可能还有不同的类型。例如,您无法将StringInt进行比较 即使两种类型都是Comparable

你想要的是

func isTgreatherthanU<T: Comparable>(t: T, u: T) -> Bool {
    return t > u
}

即。两个参数都是相同类型T的值。

答案 1 :(得分:2)

Swift标准库仅实现像>这样的二元运算符来比较两个相同类型的对象。 TU符合Comparable,但它们可能有两种不同的类型。 Swift认为TU是不同的类型,无论它们符合哪种协议。

只有这样的东西才有效:

func isTgreatherthanU<T: Comparable>(t: T, u: T) -> Bool {
    return t > u
}