创建字典类型的正确方法是什么?

Che*_*ong 2 dictionary swift

如果我想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"]!!)所以我开始想知道我是否真的需要添加问号(但是我需要字典来仍然能够取零值).谢谢.

Swe*_*per 5

第二个和第四个没关系.

在大多数情况下,您不需要使值可选.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,则必须使该值成为可选类型.