Ich bin verwirrt darüber, wie Swift nach nil sucht, wenn ich den Any-Typ verwende.
Hier ist ein Beispiel:
testA funktioniert wie erwartet. Die Variable ist null, daher ist die Bedingung falsch.
testB funktioniert nicht so wie erwartet. Die Variable ist null, wie der Druckaufruf zeigt. Die Bedingung testB != nil
wird jedoch als wahr ausgewertet. Warum ist das der Fall?
testC verwirrt mich auch, da es testC = testB = testA ist. Warum sollte es sich anders verhalten als testA?
Wie müsste ich die Bedingungen if testB ...
und if testC ...
schreiben, um nicht wahr zu sein.
Ich suche nach einer Lösung, bei der ich den Typ nicht kennen muss, wie ...
Bearbeiten: Ich teste das mit Swift 4 in einer Xcode 9.1 Playground-Datei.
Bearbeiten2:
Einige Informationen über das eigentliche Problem, das ich lösen möchte.
Ich bekomme ein Wörterbuch vom Typ [String: Any?]
, das von einem JSON-Parser erstellt wird. Ich möchte überprüfen, ob der Wert für einen bestimmten Schlüssel Null ist, aber es funktioniert nicht, wenn der Schlüssel vorhanden ist und der Wert Optional (Null) ist.
Beispiel:
%Vor% In Swift ist nil eigentlich ein konkreter Wert (vom Typ enum). testB
, das vom Typ Any
ist, enthält enum Optional
mit dem Wert none
und daher ist die Bedingung testB != nil
wahr.
Dies löst das Rätsel, wie Any
von testB
den Nullwert halten kann.
Zu Ihrem eigentlichen Problem, habe ich diesen Code in Storyboard (Xcode 9.2) versucht und es hat wie erwartet funktioniert.
%Vor%Für testB und testC scheint es so zu sein, dass == check mit nil eine Lösung liefert, aber weil der binäre Operand nicht mit zwei Any verwendet werden kann? Operanden können wir nicht ==.
verwendenDie Verwendung von switch-case kann jedoch korrekte Ergebnisse liefern:
%Vor% O / P :
Wert ist keiner
Wert ist keiner
Tags und Links swift