Swift 可选绑定不';拆开字典
我有下面的字典Swift 可选绑定不';拆开字典,swift,dictionary,Swift,Dictionary,我有下面的字典 var menuItems: [[String: String?]] = [ ["name": "Home", "identifier": "homeController"], ["name": "Page 2", "identifier": "page2"], ["name": "Page 3", "identifier": "page3"]] 现在我使用下一个代码循环浏览字典 var names: [String] = [String]() for
var menuItems: [[String: String?]] = [
["name": "Home", "identifier": "homeController"],
["name": "Page 2", "identifier": "page2"],
["name": "Page 3", "identifier": "page3"]]
现在我使用下一个代码循环浏览字典
var names: [String] = [String]()
for item in menuItems
{
if let name = item["name"]
{
names.append(name)
}
}
如果让name=item[“name”]
应展开并将名称分配给name
常量。分配工作,但不进行展开。names.append(name)
抛出未展开的可选类型“String”的异常值;你想用“!”吗或“?”?
为什么
项[“名称”]
没有展开?项[“名称”]
没有展开。它被展开为字符串?
。请记住,字典总是返回可选值(对于给定键不存在值的情况)
在您的情况下,值是另一个可选的字符串类型
如果您的字典声明为
[String:String]
(值类型为否?
),则您不必使用打开值代码>giorashc的回答是正确的,但我想我会发布这篇文章,因为它可能有助于理解原因
字典是用泛型参数K
和V
定义的
所以对于给定的字典dict:[K:V]
dict[k]
的输出类型为V?
在这种情况下,K=String
和V=String?
因此,下标访问结果的类型是String??
。正如已经指出的,哪个被解包为字符串?
下标是否还没有返回可选值?!因此,您将返回类似于String???
的内容,而不是String?
@DevAndArtist I。非常感谢。如果让value=item[“name”],name=value
,则可以使用展开此文件。我不知道item[“name”]
已展开,谢谢!