具有标量类型的 Swift Core Data 可选属性被评估为 0 而不是 NIL [重复]

Posted

技术标签:

【中文标题】具有标量类型的 Swift Core Data 可选属性被评估为 0 而不是 NIL [重复]【英文标题】:Swift Core Data optional attribute with Scalar Type gets evaluated to 0 not NIL [duplicate] 【发布时间】:2020-02-19 14:32:02 【问题描述】:

我需要一个具有可选浮点属性的实体(没有默认值)。例如:

<attribute name="price" optional="YES" attributeType="Float" usesScalarValueType="YES"/>

当我在数据库中存储一条价格为 NULL 的记录后,我想检索它并将其映射到我的一个 DTO,但令人惊讶的是,它的评估结果为 0(我期待 NIL)

查看核心数据自动生成的实体后,我发现它是作为非可选生成的:

@NSManaged public var price: Float 

现在,我明白为什么 NULL 变成 0 了,但问题更多的是如何使这个模型成为可选的。

有什么想法吗?

【问题讨论】:

【参考方案1】:

你可以添加一些基于value(forKey:)的扩展,如下所示

extension YourClass 
    var isPricePresent: Bool 
        self.value(forKey: "price") != nil
    

注意:我认为这是由于遗留和向后兼容性 - 内部容器不能存储 nil 并且 optional 不是 Objective-c 兼容类型。

【讨论】:

以上是关于具有标量类型的 Swift Core Data 可选属性被评估为 0 而不是 NIL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

swift 在Core Data中存储Swift值类型

从 Core Data 非标量属性更新 SwiftUI 视图

IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中

合并具有相同属性但 ID 不同的 NSManagedObject,与 iCloud 同步会导致重复(Core Data,Swift 1.2)

Swift 2.1 Core Data - 保存具有一对多关系的数据,但如果已经存在则不要添加异构数据

如何将日期类型保存到 Swift Core Data 中实体的属性?