0

假设我定义了一个类

class Dummy {

    var title: String?
}

我有一本字典

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

然后当我进行如下分配时

var dummy = Dummy()

dummy.title = foo[1]

它说

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

插入 ' 作为!细绳'

返回类型fooString?并且Dictionary在使用下标时返回其值类型的可选,但是String??swift中的类型是什么?

我认为进行这样的分配应该是合法的。为什么它会抱怨,我应该如何做这个作业

4

2 回答 2

0

通过声明您的字典,因为[Int:String?]您说键是 anInt并且值是 optional Strings。现在键可能不在字典中,所以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] ?? ""
于 2020-06-16T11:03:11.287 回答
0

由于字典中的键 1 对应的值foo是可选的,并且字典中的值是 typeString?它返回 type String??。解开该值一次以检查该值是否存在将解决此问题

if let value = foo[1] {
    dummy.title = value
}
于 2020-06-16T11:01:58.447 回答