如何将'nil'设置为[String:String]字典的值是有效的?

Rob*_*ert 5 dictionary swift

我很好奇为什么这个代码片段在Playground中正常工作:

var dict = [String: String]()
dict["key"] = nil
let value = dict["key"]
Run Code Online (Sandbox Code Playgroud)

我们可以看到我用非可选值声明了Dictionary,在Playground中检查它后它的工作方式与声明为的字典类似 [String: String?]

我的问题是在nil声明为[String: String]和的字典之间设置值的区别在哪里[String: String?]

Mil*_*sáľ 4

dict["key"] = nil是从字典中删除键的简写(与 using 相同dict.removeValue(forKey: "key"))。如果键下有一个值"key",则在该行之后,整个条目将从字典中删除(键和值)。

阅读下标文档以了解更多信息:

如果将 nil 指定为给定键的值,则字典会删除该键及其关联值。

在以下示例中,通过将 nil 分配给基于键的下标,从字典中删除键“Aquamarine”的键值对。

hues["Aquamarine"] = nil
print(hues)
// Prints "["Coral": 18, "Heliotrope": 296, "Cerise": 330]"
Run Code Online (Sandbox Code Playgroud)

let value = dict["key"]获取键的值,并且根据定义,nil如果给定键没有条目(在您的情况下),则返回。

根据docs,如果键不在字典中,则下标返回值或 nil:

如果 key 在字典中,则与 key 关联的值;否则为零。