Wie nil
kann man Swift Dictionary aufwerten?
Grundsätzlich genauso, wie Sie einem Wörterbuch einen anderen Wert hinzufügen. Sie benötigen zunächst ein Wörterbuch mit einem Werttyp, der Ihren Wert enthalten kann. Der Typ AnyObject
kann keinen Wert haben nil
. Ein Wörterbuch vom Typ [String : AnyObject]
kann also keinen Wert haben nil
.
Wenn Sie ein Wörterbuch mit einem Werttyp hatten, der ein optionaler Typ war [String : AnyObject?]
, kann es nil
Werte enthalten. Zum Beispiel,
let x : [String : AnyObject?] = ["foo" : nil]
Wenn Sie die tiefgestellte Syntax verwenden möchten, um ein Element zuzuweisen, ist dies etwas schwierig. Beachten Sie, dass ein Index vom Typ Typ [K:V]
hat V?
. Die Option dient dazu, beim Herausgeben anzugeben, ob für diesen Schlüssel ein Eintrag vorhanden ist oder nicht, und wenn ja, den Wert. und wenn Sie es eingeben, können Sie entweder einen Wert festlegen oder den Eintrag entfernen (durch Zuweisennil
).
Das heißt, für unser Typwörterbuch [String : AnyObject?]
hat der Index Typ AnyObject??
. Wenn Sie einen Wert in den Index einfügen, können Sie mit der Option "Outer" optional einen Wert festlegen oder den Eintrag entfernen. Wenn wir einfach schreiben würden
x["foo"] = nil
Der Compiler schließt daraus, dass es sich nil
um einen Typ handelt AnyObject??
, der äußere optional, was bedeuten würde, den Eintrag für den Schlüssel zu entfernen "foo"
.
Um zu setzen , den Wert für die Schlüssel "foo"
auf den AnyObject?
Wert nil
, müssen wir in einem nicht passieren nil
äußeren optional, eine innere optional (vom Typ enthaltend AnyObject?
) von Wert nil
. Um dies zu tun, können wir es tun
let v : AnyObject? = nil
x["foo"] = v
oder
x["foo"] = nil as AnyObject?
Alles, was darauf hinweist, dass wir ein nil
von AnyObject?
haben und nicht AnyObject??
.
nil
zu einem Schlüssel, es wird zurückkehrennil
nächstes Mal , wenn Sie diesen Schlüssel zugreifen (weil es das Objekt und das entfernte Objekt entfernt ist nicht da). Wenn Sie einennil
Wert ungleich Null darstellen möchten , können Sie verwendenNSNull()
.