Ich habe immer noch Probleme, einige Feinheiten von Generika in Swift zu verstehen. I definieren die folgenden Typen:Typ entspricht nicht dem Protokoll
protocol SomeProtocol {
func setValue(value: Int)
}
class ProtocolLabel : UILabel, SomeProtocol {
func setValue(value: Int) {
}
}
class ProtocolImageView : UIImageView, SomeProtocol {
func setValue(value: Int) {
}
}
viewForValue (2) nun definiert I die folgende Funktion. Ich erwarte, dass T eine UIView ist, die dem Protokoll SomeProtocol entspricht.
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
}
Allerdings bin ich die folgende Compiler-Fehler bekommen, wenn ich den Code ausführen:
viewForValue(2) // <-- Type 'UIView' does not conform to protocol 'SomeProtocol'
Es scheint, dass in der Klausel, wo ich nicht eine Klasse angeben, die nicht das Protokoll nicht umsetzen . Warum das?
Vielen Dank im Voraus.
Können Sie versuchen, diese verwenden: –
Greg