提问者:小点点

无法分配类型为“String??”的值 键入“字符串?” 错误


假设我定义了一个类

class Dummy {

    var title: String?
}

我有一本字典

let foo: [Int: String?]  = [:]

那么当我下达如下任务时

var dummy = Dummy()

dummy.title = foo[1]

上面写着

无法分配类型为“String??”的值 键入“字符串?”

插入‘为! 字符串“

foo的返回类型是String?Dictionary在使用下标时返回可选的值类型,但在Swift中String??类型是什么?

我认为进行这种转让应该是合法的。 为什么会抱怨?我该怎么做


共2个答案

匿名用户

由于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] ?? ""