Nadal mam problem ze zrozumieniem niektórych subtelności generycznych w Swift. Zdefiniować następujące typy:Typ nie jest zgodny z protokołem
protocol SomeProtocol {
func setValue(value: Int)
}
class ProtocolLabel : UILabel, SomeProtocol {
func setValue(value: Int) {
}
}
class ProtocolImageView : UIImageView, SomeProtocol {
func setValue(value: Int) {
}
}
viewForValue (2) Teraz zdefiniowane następujące funkcje. Oczekuję, że T będzie UIView, który jest zgodny z protokołem 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
}
Jednak ja otrzymuję następujący błąd kompilacji kiedy wykonać kod:
viewForValue(2) // <-- Type 'UIView' does not conform to protocol 'SomeProtocol'
Wydaje się, że w przypadkach, gdy klauzula nie mogę określić klasę, która nie implementuje protokół . Dlaczego?
Z góry dziękuję.
można spróbować użyć tego: –
Greg