我很好奇为什么这个代码段在Playground中正常运行:
var dict = [String: String]()
dict["key"] = nil
let value = dict["key"]
我们可以看到我使用非可选值声明了Dictionary,在Playground中检查它后它的工作方式与声明为[String: String?]
的字典类似
我的问题是在声明为nil
和[String: String]
的字典之间设置[String: String?]
值的区别在哪里?
答案 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?)。