Swift 字典值是否自动成为可选值?

Swift 字典值是否自动成为可选值?,swift,dictionary,Swift,Dictionary,嘿,伙计们,我是斯威夫特的新手,正在尝试解决一些微妙的问题。也就是说,在我继续编写代码之前,我想在这里巩固我的理解。运行此代码后: var content:[String:Double] = [:] content["swords"] = 12 content["bows"] = 113 content["swords"] = content["swords"] + 12 // problem line 我得到以下信息: 错误:可选类型“Double”的值未展开 这是否意味着字典中的每个值都

嘿,伙计们,我是斯威夫特的新手,正在尝试解决一些微妙的问题。也就是说,在我继续编写代码之前,我想在这里巩固我的理解。运行此代码后:

var content:[String:Double] = [:]
content["swords"] = 12
content["bows"] = 113
content["swords"]  = content["swords"] + 12 // problem line
我得到以下信息:

错误:可选类型“Double”的值未展开

这是否意味着字典中的每个值都是可选的?我想如果这是真的,那么我可以只添加一个没有值的键并打印它

var content:[String:Double] = [:]
content["swords"] = 12
content["bows"] = 113
content["blade"]
print(content["blade"])

事实上,它确实打印了
nil
那么这是真的吗?

如果没有设置键,字典通常会返回nil。您没有添加没有值的键,您只是读取了两次未设置的键,因此两次都返回nil(一次不执行任何操作,第二次打印)。

您有两个完全不同的问题。在第二个代码中,您从未为键
“blade”
赋值,这就是
print
语句显示
nil
的原因

该行:

content["blade"]
没有添加任何内容。它实际上尝试访问该键处的值

代码的第一位的问题很简单,因为任何字典查找的值都是可选值,因为在运行时不能保证给定键有值

您可以通过执行以下操作修复代码:

content["swords"]  = content["swords"]! + 12
但不要那样做。相反,要安全地进行:

if let swords = content["swords"] as? Double {
    content["swords"] = swords + 12
}

但是当值确实存在时,它们是可选的,对吗?因为这是Swifts让您知道应该检查未定义的键的方法-是的,它们是。