2017-01-05 64 views
2

的前提下,它是我第一次試着去了解通用功能的通用功能,我想知道什麼是錯用下面的代碼(SWIFT 3):麻煩與斯威夫特3

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

(我知道這是一個愚蠢的功能,但它只是爲了瞭解如何編寫通用代碼)

編譯器說:

二元運算符「>」不能應用於類型的操作數「T」和「U '

我認爲,通過聲明TU符合Comparable協議,代碼應該已經工作,但我顯然做錯了什麼......任何想法?

回答

4

Comparable類型的值可以與的另一個值 相比較。在你的情況下,TU是不相關的 和可能不同的類型。例如,即使兩種類型都是Comparable,您也無法將StringInt 進行比較。

你想要的是

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

即兩個參數是相同類型T的值。

2

Swift標準庫只實現像>這樣的二元運算符來比較兩個相同類型的對象。 TU都符合Comparable,但它們可能是兩種不同的類型。 Swift認爲TU是不同的類型,不管它們遵守哪些協議。

只有類似的東西會工作:

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