У меня все еще есть проблемы с пониманием некоторых тонкостей дженериков в Свифте. Я определяю следующие типы:Тип не соответствует протоколу
protocol SomeProtocol {
func setValue(value: Int)
}
class ProtocolLabel : UILabel, SomeProtocol {
func setValue(value: Int) {
}
}
class ProtocolImageView : UIImageView, SomeProtocol {
func setValue(value: Int) {
}
}
viewForValue (2) Теперь я определил следующую функцию. Я ожидаю, что T будет UIView, который соответствует протоколу SomeProtocol.
func viewForValue<T where T: SomeProtocol, T: UIView>(param: Int) -> UIView {
var someView: T
if param > 0 {
someView = ProtocolLabel() as T
} else {
someView = ProtocolImageView() as T
}
someView.setValue(2)
someView.frame = CGRectZero
return someView
}
Однако я получаю следующую ошибку компиляции, когда я выполняю код:
viewForValue(2) // <-- Type 'UIView' does not conform to protocol 'SomeProtocol'
Кажется, что в пункте где я не могу определить класс, который не реализует протокол , Почему это?
Заранее спасибо.
Вы можете попробовать использовать это: –
Greg