【问题标题】:Value of optional type 'UIColor?' must be unwrapped to a value of type 'UIColor'可选类型 'UIColor?' 的值必须解包为“UIColor”类型的值
【发布时间】:2021-01-13 17:27:37
【问题描述】:

使用

self.backgroundColor = .init(named: "my-color")

其中selfUIView,会触发此错误:

可选类型“UIColor?”的值必须解包为“UIColor”类型的值
使用 '??' 合并当可选值包含 'nil' 时提供默认值 [修复]
使用“!”强制展开如果可选值包含'nil'则中止执行[修复]

编译器知道backgroundColor 属性的类型是UIColor?,所以它应该为初始化器推断它,对吧?

此外,知道该属性是可选的,错误消息对我来说没有太大意义。

另外,两个自动修复都是“递归”的,这意味着它们不能修复错误,我可以一遍又一遍地应用它们。

注意:我知道我可以使用UIColor.init 或简单地使用UIColor。这只是一个简化的例子。

【问题讨论】:

  • 您的代码似乎缺少一些上下文:您没有包含任何内容来向我们展示self.backgroundColor 的实际定义是什么。
  • 您需要edit 您的问题以minimal reproducible example 的形式包含所有相关代码,以便使问题成为主题。
  • 对我来说,从描述中可以清楚地看出 backgroundColor 的类型是UIColor?。我自己运行了代码,可以验证与在这个问题中观察到的相同结果,我仍然认为这是一个有效且有趣的问题。似乎 swift 语义分析器试图推断类型的方式有些问题。
  • @DávidPásztor,对,但大家都清楚selfUIView。但即使没有这个,它也无关紧要,因为我说过它是 UIColor? 类型的属性。

标签: swift syntax-error optional


【解决方案1】:

我认为这个错误没有意义,经过一番研究,我发现它实际上是 Swift 中的一个已知错误。参考是here
基本上,编译器似乎试图通过可选项查找您的初始化程序。
看来该修复程序将在下一个版本中提供。

【讨论】:

    【解决方案2】:

    backgroundColor 被声明为可选。编译器推断UIColor?并尝试创建

    self.backgroundColor = UIColor?.init(named: "my-color")
    

    不支持 - 并且与可选的 init 方法无关。


    你必须使用非可选类型

    self.backgroundColor = UIColor(named: "my-color")
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多