Zwei (oder mehr) Optionale in Swift

8

Während ich ein Apple-Video über LLDB-Debugger angeschaut habe, habe ich etwas gefunden, für das ich keine Erklärung finden kann; Er sprach über optionale Werte, als er schrieb:

%Vor%

Ich öffnete einen Spielplatz und fing an, es auszuprobieren und erkannte, dass du so viele ? schreiben kannst, wie du willst, und dann entpacke sie mit der gleichen Anzahl von ! . Ich verstehe das Konzept von das Umhüllen / Auspacken einer Variablen , aber ich kann mir keine Situation vorstellen, in der ich einen Wert 4, 5 oder 6 mal umschließen möchte.

    
Sherekan 01.12.2014, 09:26
quelle

2 Antworten

10

(für Swift 2 aktualisiert.)

"Double optionals" kann nützlich sein, und der Swift Blogeintrag "Optionals Case Study: valuesForKeys" beschreibt eine Anwendung.

Hier ist ein vereinfachtes Beispiel:

%Vor%

ist ein Wörterbuch mit optionalen Strings als Werten. Deshalb

%Vor%

hat den Typ String?? aka Optional<Optional<String>> . Es ist .None (oder nil ) wenn der Schlüssel nicht im Wörterbuch vorhanden ist, und .Some(x) andernfalls. In dieser Sekunde Fall, x ist ein String? aka Optional<String> und kann .None (oder nil ) sein oder .Some(s) wobei s ein String ist.

Sie können verschachtelte optionale Bindungen verwenden, um nach den verschiedenen Fällen zu suchen:

%Vor%

Ausgabe:

%Vor%

Es mag aufschlussreich sein zu sehen, wie das Gleiche mit dem Mustervergleich erreicht werden kann in einer switch-Anweisung:

%Vor%

oder mithilfe des Musters x? als Synonym für .Some(x) :

%Vor%

(Ich kenne keine sinnvolle Anwendung für tiefer verschachtelte Optionen.)

    
Martin R 01.12.2014, 10:41
quelle
1
%Vor%

ist dasselbe wie

%Vor%

Ich kann mir keinen nützlichen Gebrauch davon vorstellen, aber es ist da, weil Optionals generische Arbeit für jede Art von Objekt sind. Verschachtelte Optionen sind wie Felder, die in eine andere Box oder ein Array, aber in ein anderes Array eingefügt werden.

    
Kirsteins 01.12.2014 09:56
quelle

Tags und Links