Ich mache ein Protokoll:Swift Erweiterung Speicher für Protokolle
protocol SomeProtocol {
func getData() -> String
}
ich eine Struktur zu machen, die ihm entspricht:
struct SomeStruct: SomeProtocol {
func getData() -> String {
return "Hello"
}
}
Jetzt möchte ich jeden UIViewController
eine Eigenschaft haben source
genannt, so dass ich kann etwas tun wie ...
class MyViewController : UIViewController {
override func viewDidLoad() {
self.title = source.getData()
}
}
Um dies zu erreichen, erstelle ich ein Protokoll zu d efine die Eigenschaft:
protocol SomeProtocolInjectable {
var source: SomeProtocol! { get set }
}
Jetzt brauche ich nur die View-Controller mit dieser Eigenschaft erweitern:
extension UIViewController: SomeProtocolInjectable {
// ???
}
Wie kann ich zusammen eine gespeicherte Eigenschaft hacken, die mit einem Protokolltyp funktionieren wird?
Was nicht funktioniert hat:
var source: SomeProtocol!
offensichtlich nicht funktioniert, weil Erweiterungen haben keine gespeicherten Eigenschaften- Ich kann nicht use Objective-C associated objects weil ein Protokoll kein Objekt ist
- I kann nicht wrap it in a class (dies für andere Werttypen funktioniert, aber nicht Protokolle)
Alle anderen Vorschläge?
Wird die Verwendung einer statischen Eigenschaft für Sie funktionieren? –
Das ist ein guter Workaround, aber im Idealfall würden verschiedene View-Controller unterschiedliche Quellen haben. Wenn Sie es als Antwort verlassen wollen, werde ich es in ein oder zwei Tagen akzeptieren, wenn nichts Besseres kommt. –
Siehe meine Antwort unten - Sie können verschiedene "Quelle" pro Instanz mit einigen * Proxy * -Typ erreichen ... –