Swift-äquivalent von id<MyProtocol>?
Die Frage ist im Titel. In Objective-C, wenn ich eine Eigenschaft (wie ein Delegierter), die HAT die Einhaltung eines bestimmten Protokolls festgelegt werden kann, etwa so:
@property (weak) id<MyDelegate> delegate;
Wie kann ich dies in Swift?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist ein Protokoll eine Art, so können Sie es als eine deklarierte variable Typ. Verwenden
weak
müssen Sie wickeln Sie den Typ als Optional. Also würdest du sagen:Aber um für diese zu arbeiten, MyDelegate muss ein
@objc
oderclass
Protokoll, um zu gewährleisten, dass der Anwender ist eine Klasse (nicht mit einem struct oder enum, als Sie nichtweak
).Ich denke, dass das genau entgegengesetzte ist:
Ziehe ich diese alte, objc, Stil über das swift-syntax, da in swift erste ist die Basisklasse und dann alle Protokolle angenommen. Dies kann verwirrend sein, falls Ihr Protokoll nicht "Delegieren" - suffix, weil Sie nicht mehr wissen, ob DataAdoption(zum Beispiel) ist super-Klasse oder ein Protokoll.
Verwenden Sie das Protokoll, wie ein Typ so:
Es ist auch gut zu wissen, dass das äquivalent für die Objective-C
id<MyProtocolName>
in der Deklaration der Methode in Swift istprotocol<MyProtocolName>
. Zum Beispiel: