我有一个字典和打印字典键值如下:
var student = ["name": "Alan Turing",
"age": "23",
"gender": "Male"
]
println(student["name"])
for item in student{
println("Student: \(item.0) = \(item.1)" )
}
if let name = student["name"]{
println(name)
}
输出如下:
Optional("Alan Turing")
Student: gender = Male
Student: age = 23
Student: name = Alan Turing
Alan Turing
我想知道为什么为这行代码打印了可选值
println(student["name"]) ==> Optional("Alan Turing")
这与 for
和 let
方法有何不同,我是否需要在按键访问时显式解包项目值?例如
println(student["name"]!)
最佳答案
当您通过键 (dict[key]
) 下标访问字典时,如果键不存在,则返回的值为 nil
。所以student["name"]
的结果类型是String?
,考虑到nil
的可能性,结果是一个Optional(...)
。
在另外两种情况下(for
和 if let
),控制结构会自动解包该值,因为不可能有值 nil
结果,因此 item
的类型是 (String, String)
而不是 (String, String?)
,name
的类型是String
。
因此,如果您直接使用 student["name"]
,您应该解包可选值以获得 String
(通过使用不同的解包运算符)。
关于ios - 展开字典项值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815668/