繁体   English   中英

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

[英]Cannot assign value of type 'String??' to type 'String?' error

假设我定义了一个 class

class Dummy {

    var title: String?
}

我有一本字典

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

然后当我进行如下分配时

var dummy = Dummy()

dummy.title = foo[1]

它说

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

插入 ' 作为! 细绳'

foo的返回类型是String? Dictionary在使用下标时返回其值类型的可选,但什么是String?? 输入 swift?

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

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

if let value = foo[1] {
    dummy.title = value
}

通过将您的字典声明为[Int:String?]您是说键是Int并且值是可选的String s。 现在键可能不存在于字典中,所以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] ?? ""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM