swift-Protokoll 'schwachen' nicht angewendet werden kann, um non-Klasse Typ
Ich bin ein wenig verwirrt. Was ist der Unterschied zwischen protocol A : class { ... }
und protocol A{ ... }
, und die sollten wir nutzen in swift?
PS: bekamen wir einen Fehler, wenn wir schrieben, wie diese
protocol A{ ... }
weak var delegate: A
Fehler : 'schwachen' nicht angewendet werden kann, um non-Klasse Typ
Du musst angemeldet sein, um einen Kommentar abzugeben.
definiert eine "Klasse-nur Protokoll": Nur Klassentypen (und nicht von Strukturen oder Enumerationen) können beschließen, dieses Protokoll.
Schwache Referenzen sind nur definiert für Referenz-Typen. Klassen
sind Referenz-Typen, Strukturen und Enumerationen sind Wert-Typen.
(Verschlüsse sind Referenz-Typen als gut, aber die Verschlüsse nicht übernehmen
ein Protokoll, so dass Sie in diesem Kontext irrelevant sind.)
Daher, wenn das Objekt gemäß dem Protokoll gespeichert werden muss in eine schwache Eigenschaft dann das Protokoll muss eine Klasse sein-nur Protokoll.
Hier ist ein weiteres Beispiel, das erfordert einen Klasse-nur Protokoll:
Diese nicht kompiliert werden, da für die Instanzen von Strukturen und Enumerationen,
a.name = "bar"
ist eine mutation desa
. Wenn Sie definierendas Protokoll als
dann weiß der compiler, dass
a
ist eine Instanz einer Klasse geben zu, dassa
ist eine Referenz auf das Objekt, Lagerung,und
a.name = "bar"
ändert das referenzierte Objekt, aber nichta
.So allgemein, würden Sie eine Klasse definieren-Protokoll nur, wenn Sie müssen
die Typen die Annahme des Protokolls zu werden Referenztypen und keine Wertetypen.
'a' is a 'let' constant
. Ich bin ein wenig verwirrt. Was machta
hier eine Konstante?a
imfunc foo(a : A)
– sind standardmäßig Konstanten.weak
oderstrong
Eigenschaften (nurget
undget set
); sollte es nicht Lesen: "Daher, wenn das Objekt entspricht, muss das Protokoll aufbewahrt werden Sie in einer schwachen Eigenschaft..."?Können Sie dem Protokoll ableiten von jeder Klasse Typ, wie NSObject, oder AnyObject. e.g :
Oder Sie können die Art, wie diese
dann können Sie eine schwache delegieren Referenz