+-
假设我定义了一个类
class Dummy {
var title: String?
}
而我有一本字典作为
let foo: [Int: String?] = [:]
然后当我做一个如下的任务时
var dummy = Dummy()
dummy.title = foo[1]
它说
不能将类型'String??'的值赋给类型'String?'。
插入'as! 字符串'。
返回类型 foo
是 String?
和 Dictionary
当使用下标时,返回其值类型的可选值,但什么是下标?String??
类型为swift?
我觉得做这样的赋值应该是合法的.为什么它会抱怨,我应该如何做这个赋值呢?
0
投票
投票
由于在字典里有一个与键1相对应的值。foo
是可选的,字典中的值是类型为 String?
它返回类型 String??
. 解开一次包装来检查该值是否存在将解决这个问题。
if let value = foo[1] {
dummy.title = value
}
0
投票
投票
通过声明你的字典为 [Int:String?]
你的意思是说,钥匙是一个 Int
和值是可选的 String
s. 现在钥匙可能不在字典中出现,所以。foo[1]
optionally返回一个可选的选项,最后你会得到一个带有可选的选项------。String??
虽然有时会用到可选的选项,但我不认为这就是你想要的。
你可以简单地制作一个 [Int:String]
如果该值为 nil
.
let foo: [Int: String] = [:]
dummy.title = foo[1]
如果你确实需要处理 "这个键有一个值,而且它是 nil
",那么nil-coalescing运算符可能会帮助你。
dummy.title = foo[1] ?? nil
甚至
dummy.title = foo[1] ?? ""