【发布时间】:2019-07-22 07:38:00
【问题描述】:
考虑下面的sn-p代码
class A {
var value: Int?
}
let a: A? = A()
let kp = \A.value
a?[keyPath: kp] = 10
print(a?.value)
这很完美,Optional(10) 会按预期打印。在我的实际应用程序中,我试图以这种方式设置的字段被声明为Date?,它会导致一些奇怪的错误。我实际应用的 MWE 是这样的:
class A {
var value: Date?
}
let a: A! = A()
let kp = \A.value
a?[keyPath: kp] = Date() // Line with error
print(a?.value)
但是编译器抱怨突出显示的行并说:
可选类型“日期?”的值必须解包为“日期”类型的值
修复:使用 '??' 合并当可选值包含'nil'时提供默认值
修复:使用“!”强制解包如果可选值包含'nil'则中止执行
这是编译器的一个错误,我们可以期望在最终版本之前修复,还是我对键路径不了解?
我使用的是 Xcode 11 beta 3,但我在 beta 2 中也遇到了同样的问题。如果有用,实际代码是 here。
【问题讨论】:
-
这是一个错误,已提交报告:bugs.swift.org/browse/SR-11184