Ich habe eine Modellobjektvariable in Swift View Controller. Die Sache, die ich tun möchte, ist, dass ich bei der Initialisierung des VC keinen Wert dafür habe. Aber nach einem asynchronen Netzwerkaufruf habe ich das analysierte Modellobjekt, das diese Variable enthalten sollte, aber von nun an möchte ich nichts mehr den Wert der Modellvariablen ändern.
Ist das in Swift möglich? wenn ja, wie?
Basierend auf Babul Prabhakar Antwort, aber ein bisschen sauberer.
Ansatz 1:
%Vor%Bearbeiten: es kürzer gemacht
Ansatz 2:
%Vor%Ich denke, der zweite Ansatz ist die "eingebaute" Option von Swift, um eine Variable einmal zu deklarieren. Dies ist nur möglich, wenn die Variable direkt nach der Deklaration zugewiesen wird.
Ich würde persönlich mit dem Ansatz von @Eendje oder @Babul Prabhakar gehen, wenn myPrivateVar
irgendwie auf nil
gesetzt wäre, der Setzer könnte immer noch zweimal schreiben. Ich wollte eine andere Option teilen, die guaranteed
ist, um nie zweimal gesetzt zu werden ( solange das Token niemals geschrieben wird! ):
Die Funktion dispatch_once () bietet einen einfachen und effizienten Mechanismus einen Initializer genau ausführen einmal ähnlich wie pthread_once (3). Gut entworfener Code verbirgt die Verwendung der faulen Initialisierung. Zum Beispiel: Beispiel:
Ich fürchte, es gibt keinen traditionellen Weg in Swift und auch nicht in anderen Sprachen. (Traditionell bedeutet hier, dass Sie das unterstützte Sprachschlüsselwort für Ihren Zweck verwenden). Es ist schwierig für Sie zu wissen, dass diese Variable zuvor initialisiert wurde (ohne eine Zustandsvariable zur Überprüfung zu verwenden).
Sie können dieses Entwurfsmuster verwenden: Deklarieren Sie alle Eigenschaften als private
(damit Sie diese Eigenschaften nicht anderswo in Ihrem Code festlegen können). Und Sie werden alle Eigenschaften in constructor
initialisieren. So werden alle Eigenschaften nur einmal initialisiert.
Objective-C
und Swift 2
hat Zugriffsmodifizierer wie public
protected
private
.
Hinweis : Swift 1
hat keinen Zugriffsmodifikator.
Hier ist eine Demo in Swift 2
:
Hier ist eine Demo in Objective-C
:
Ich hoffe, diese Hilfe:)
Swift unterstützt Lazy-Variablen. Zum Beispiel wird die folgende Variable auf den Wert "Hi There!" nur bei Zugriff.
%Vor%Tags und Links swift