假设我定义了一个类
class Dummy {
var title: String?
}
我有一本字典
let foo: [Int: String?] = [:]
那么当我下达如下任务时
var dummy = Dummy()
dummy.title = foo[1]
上面写着
无法分配类型为“String??”的值 键入“字符串?”
插入‘为! 字符串“
foo
的返回类型是String?
和Dictionary
在使用下标时返回可选的值类型,但在Swift中String??
类型是什么?
我认为进行这种转让应该是合法的。 为什么会抱怨?我该怎么做
由于foo
具有对应于字典中键1的值是可选的,而且字典中的值是String?
类型,因此它返回String??
类型。 将该值展开一次以检查该值是否存在,可以解决此问题
if let value = foo[1] {
dummy.title = value
}
通过将字典声明为[int:string?]
,您的意思是键是int
,值是可选的string
。 现在该键可能不在字典中,因此foo[1]
可选地返回一个可选的,您最后得到一个带有可选的可选-string??
现在,虽然有时会使用可选选项,但我认为这不是您在本例中所希望的。
您可以简单地创建一个[int:string]
的字典,如果值为nil
,则不插入元素。
let foo: [Int: String] = [:]
dummy.title = foo[1]
如果您确实需要处理“这个键有一个值并且它是nil
”的情况,那么nil-coalescing运算符可能会帮助您:
dummy.title = foo[1] ?? nil
或者甚至
dummy.title = foo[1] ?? ""