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

时间:2018-04-11 10:09:49

标签: swift dictionary

我很好奇为什么这个代码段在Playground中正常运行:

var dict = [String: String]()
dict["key"] = nil
let value = dict["key"]

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

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

3 个答案:

答案 0 :(得分:4)

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

阅读下标docs了解详情:

  

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

     

在下面的示例中,通过为基于键的下标指定nil,从字典中删除键“Aquamarine”的键值对。

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

let value = dict["key"]获取密钥的值,如果没有给定密钥的条目(在您的情况下),则按定义返回nil

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

  

与键if键相关的值在字典中;否则,没有。

答案 1 :(得分:1)

dict["key"] = nil表示您要从字典中删除该项目。返回类型dict[someKey]是可选的,因为密钥可能不存在。

答案 2 :(得分:0)

您可以考虑实施:

dict["key"] = nil

与调用removeValue(forKey:)相同:

dict.removeValue(forKey: "key")

默认情况下,从字典中获取值将返回可选值:

var dict = [String: String]()
dict["key"] = "Hello"

let value = dict["key"] // Optional("Hello")

请注意,value的类型是可选字符串(String?)。