Optionale Variablen im Protokoll möglich?
protocol AProtocol: BProtocol {
///content to be shown on disclaimer Label of cell
var disclaimer: String {get set}
var cellDisclaimerAttributed: NSAttributedString {get}
var showSelection: Bool {get set}
var isReadMore: Bool {get}
}
Ich möchte Variablen optional, so dass ich brauche nicht implementieren alle Variablen jedes mal nach der konformen Protokolls. Wie in Objective-C, wir haben für Methoden:
protocol AProtocol: BProtocol {
///content to be shown on disclaimer Label of cell
optional var disclaimer: String {get set}
optional var cellDisclaimerAttributed: NSAttributedString {get}
optional var showSelection: Bool {get set}
optional var isReadMore: Bool {get}
}
Ist es möglich?
- Die Fehlermeldung für das zweite Beispiel, das Sie geben, sagt "'optional' kann nur angewendet werden, um Mitglieder einer @objc-Protokoll" (hint hint)
- Duplikat von stackoverflow.com/questions/31478562/... oder stackoverflow.com/questions/31333863/... ?
- Oben links über Methoden sprechen nur. @MartinR
- Macht es einen Unterschied?
- Nein, nach dem hinzufügen @objc zu den Protokollen, noch dass ein Fehler ausgegeben wird, um alle Variablen in dieser Klasse.
- ja für Methoden, es funktioniert, aber nicht für Variablen.
- Sind Sie sicher? Ich habe gerade versucht
@objc protocol MyProtocol { @objc optional var disclaimer: String { get set } }
undclass Foo: MyProtocol { }
. - Bitte entsprechen Sie dieses Protokoll, um jede andere Klasse, erhalten Sie die Fehlermeldung.
- Wenn AProtocol erbt von BProtocol dann natürlich beide Protokolle (und die optionale Eigenschaft) müssen gekennzeichnet sein mit
@objc
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bieten eine Standard-Erweiterung für das Protokoll. Bereitstellen der Standard-Implementierung für alle Variablen set und get, was u wollen, dass Sie optional sein.
In unter-Protokolls, name und Alter sind optional.
Nun, wenn ich bin, konform der oben-Protokoll zu jeder anderen Klasse, wie
TestViewController
Sie nicht implementieren müssen, um dieget set
. Nachdem die variable definiert alsvar itemName: String = ""
ist alles, was benötigt wird.Wenn Sie wollen entsprechen der Swift-Dokumentation, Sie setzt es so :