Wie initialisiert man eine Variable, ist sie abgeschlossen, ist der Wert endgültig

9

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?

    
inforeqd 27.01.2016, 05:12
quelle

5 Antworten

7

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.

    
Eendje 27.01.2016, 06:04
quelle
8

Was Sie tun können, ist

%Vor%     
Babul Prabhakar 27.01.2016 05:42
quelle
2

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! ):

%Vor%
  

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:

Quelle

    
Dan Beaulieu 27.01.2016 15:47
quelle
0

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 :

%Vor%

Hier ist eine Demo in Objective-C :

%Vor%

Ich hoffe, diese Hilfe:)

    
hqt 27.01.2016 05:49
quelle
0

Swift unterstützt Lazy-Variablen. Zum Beispiel wird die folgende Variable auf den Wert "Hi There!" nur bei Zugriff.

%Vor%     
Julio Garcia 09.03.2018 19:50
quelle

Tags und Links