SwiftUI 核心数据可选和非可选属性

SwiftUI core data optional and non-optional properties

我在使用核心数据实体和 SwiftUI 时遇到问题。在我看来,有些属性在应该是可选的时候是非可选的,我不明白为什么。

这是我的条目核心数据实体:

以下是我尝试在视图中使用它的方式:

if entry.text != nil {
    Text(entry.text!)
}

if entry.number != nil {
    Text("\(entry.number, specifier: "%.0f")")
}

if entry.boolean != nil {
    Text(entry.boolean ? "True" : "False")
}

我的问题是 entry.numberentry.boolean,swift 抱怨 Comparing non-optional value of type 'Double' to 'nil' always returns true

entry.text 不会发生这种情况。我已经通过 运行 print(entry)numberboolean 检查了持久存储中的值 nil

我了解核心数据选项和 swift 选项不同。但是,在这种情况下,不应该所有 Entry 属性都是可选的吗?为什么 SwiftUI 抱怨他们不是?

当您创建实体时,Boolean 和 Double 的默认设置是使用标量(原始)类型,它们是非可选的,因为 Objective-C(这是 Core Data 所基于的)不能处理可选的标量类型。

代码中是这样定义的

@NSManaged public var boolean: Bool
@NSManaged public var number: Double

如果您取消选中使用标量类型 (Inspector Cmd-alt-0),则基础类型将改为 NSNumber,它们将是可选的

@NSManaged public var number: NSNumber?
@NSManaged public var boolean: NSNumber?