Was ist in Swift die herkömmliche Methode, um das allgemeine Muster zu definieren, bei dem eine Eigenschaft extern schreibgeschützt, aber intern von der Klasse (und den Unterklassen), die sie besitzen, geändert werden kann.
In Objective-C gibt es folgende Optionen:
- Deklarieren Sie die Eigenschaft in der Schnittstelle als schreibgeschützt und verwenden Sie eine Klassenerweiterung, um intern auf die Eigenschaft zuzugreifen. Dies ist ein nachrichtenbasierter Zugriff, daher funktioniert er gut mit KVO, Atomizität usw.
- Deklarieren Sie die Eigenschaft in der Schnittstelle als schreibgeschützt, greifen Sie jedoch intern auf den Hintergrund ivar zu. Da der Standardzugriff für ein ivar geschützt ist, funktioniert dies gut in einer Klassenhierarchie, in der Unterklassen auch den Wert ändern können, das Feld jedoch ansonsten schreibgeschützt ist.
In Java lautet die Konvention:
- Deklarieren Sie ein geschütztes Feld und implementieren Sie einen öffentlichen schreibgeschützten Getter (Methode).
Was ist die Redewendung für Swift?
quelle
var
Schlüsselwort hinzuzufügen , damit es kompiliert wird.)public
- es sollteinternal
oder gar nichts sein (was standardmäßig die Klasse ist -public
oderinternal
) - dhprivate(set) var readonlyProperty: Int
private
beschränkt sich aber jetzt auf den aktuellen Deklaration (nicht auf die Datei) undfileprivate
kann auf die aktuelle Datei beschränkt werden. Hatpublic
auch einige Einschränkungen undopen
wird für keine Einschränkungen benötigt. Details hier .Gemäß @Antonio können wir eine einzelne Eigenschaft verwenden, um
readOnly
öffentlich undreadWrite
privat auf den Eigenschaftswert zuzugreifen . Unten ist meine Illustration:Und hier ist die Ausgabe:
quelle