具有标量类型的 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 Core Data 非标量属性更新 SwiftUI 视图
IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中
合并具有相同属性但 ID 不同的 NSManagedObject,与 iCloud 同步会导致重复(Core Data,Swift 1.2)