2017-01-05 2 views
2

с предпосылкой, что это первый раз, когда я пытаюсь понять общие функции, мне было интересно, что случилось со следующим кодом (Swift 3):Проблема с обобщенной функцией в Swift 3

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

(я знаю это глупая функция, но это только означает, чтобы понять, как написать универсальный код)

компилятор говорит:.

бинарный оператор «>» не может быть применен к операндам типа «Т» и «U '

Я думал, что, объявив T и U в соответствии с протоколом Comparable, код должен был работать, но я, очевидно, что-то не так ... Любая идея?

ответ

4

Значение типа Comparable можно сравнить с другим значением от того же типа. В вашем случае T и U не связаны и, возможно, разные типы. Например, вы не можете сравнить String с Int , даже если оба типа: Comparable.

Что вы хотите

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

т.е. оба аргумента значения типа Tже.

2

Библиотека Swift Standard реализует только двоичные операторы, такие как >, для сравнения двух объектов того же типа. T и U соответствуют как Comparable, но они могут быть двух разных типов. Swift рассматривает T и U как разные типы, независимо от того, к каким протоколам они соответствуют.

Только что-то подобное будет работать:

func isTgreatherthanU<T: Comparable>(t: T, u: T) -> Bool { 
    return t > u 
} 
Смежные вопросы