如果我想typealias
为一个字典定义一个,它接受String
作为键,并String
为值,但我也希望它能接受nil
,这些定义中哪一个是正确的?
typealias dictString = Dictionary<String, String?>
Run Code Online (Sandbox Code Playgroud)
要么
typealias dictString = Dictionary<String, String>
Run Code Online (Sandbox Code Playgroud)
要么
typealias dictString = [String:String?]
Run Code Online (Sandbox Code Playgroud)
要么
typealias dictString = [String:String]
Run Code Online (Sandbox Code Playgroud)
因为我使用第一个,现在每次我想打开一个值,我需要打开它两次(例如dict["name"]!!
)所以我开始想知道我是否真的需要添加问号(但是我需要字典来仍然能够取零值).谢谢.
第二个和第四个没关系.
在大多数情况下,您不需要使值可选.nil
即使未将值声明为可选类型,也可以将键的值设置为:
var dict = [String: String]()
dict["Hello"] = nil
Run Code Online (Sandbox Code Playgroud)
当您访问时"Hello"
,它会返回nil
.太棒了!
事实上,设置一个键的值nil
意味着"删除键".如果你不知道这会导致意想不到的结果.
例如,
var dict = [String: String]()
dict["Hello"] = nil
print(dict.keys.contains("Hello"))
Run Code Online (Sandbox Code Playgroud)
打印false
.
如果您需要检查密钥是否存在,即使其值是nil
,则必须使该值成为可选类型.