Swift === mit null
Warum funktioniert das folgende nicht in Swift?
if someObject === nil {
}
Ihnen zu tun haben, der test mit dem = = - operator, wie
if someObject == nil {
}
Ich dachte, dass === war mehr wie sicher, dass die Fälle, in denen die exakt gleichen (im Grunde vergleicht man die Zeiger) und == war mehr wie ein isEqual überprüfen. Also ich würde denken === wäre besser geeignet für die Prüfung gegen null, aber ich bin offensichtlich falsch.
Gibt die Dokumentation:
=== oder "Identisch" bedeutet, dass zwei Konstanten oder Variablen der Klasse geben
finden Sie genau das gleiche Instanz der Klasse.== oder "Gleich" bedeutet, dass zwei Instanzen werden als "gleich" oder "äquivalent"
im Wert, für einige passende Bedeutung von "gleich", wie definiert durch die Art der designer."
- Das folgende funktioniert bei mir
class Person {} let p = Person() let q : Person? = nil println(p === nil) println(q === nil)
- Das Objekt hätte einen Wert von null nicht auf genau das gleiche Objekt wie der null, die ist, was === bedeutet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert es genau so wie du erwarten:
Die einzige Einschränkung ist, dass zu vergleichen, um
nil
Ihre variable muss in der Lage seinnil
. Dies bedeutet, dass es sein muss eine optionale, gekennzeichnet mit einem?
.var s: String
ist nicht gestattetnil
, so würde daher immer zurückfalse
wenn===
im Vergleich zunil
.Int?
zum Beispiel.Int
ist nicht ein Klasse Typ, er ist ein Wert-Typ.===
operator ist nur definiert für Klasse-Typen (und auch fürArray
aber das ist ein Sonderfall). Daher können Sie nicht verwenden===
fürInt
Variablen.Mein Erster Instinkt würde sein, dass
nil
ist nicht eine Instanz der Klasse, aber ein Hinweis. SosomeObject
kann eine entsprechende Instanz der Klasse zunil
.