【发布时间】:2017-07-26 03:31:02
【问题描述】:
(首先注意到:Xcode 8.2.1、iOS 10、Swift 3) (仍然存在:Xcode 9 beta 3、iOS11、Swift 4)
我们都知道optionals 的Core Data 概念在optionals 的Swift 概念之前并且不严格绑定。
而且我们已经接受即使Core Data 属性被标记为Non-optional,自动生成的NSManagedObject 子类也有optional 类型:
(有些人手动删除? 没有任何不良影响,有些人没有,但那不是重点)
(此处的示例和屏幕截图适用于 Bool 属性,但同样适用于 Int16/32/64、Double、Float)
现在我注意到相反的情况 - 当 Bool 类型的 Core Data 属性被标记为 Optional (并且选择了 Use Scalar Type,Xcode 默认情况下),自动生成的类有一个变量non-optional 类型。
这有意义吗?它是一个错误吗?该行为是否记录在任何地方?
最重要的是 - 我如何实际表示可选的Bool?
我可以想到一些变通方法,但它们似乎并不理想(例如,不使用标量,而是回到Bool 的NSNumber 表示。或者(更糟糕的是)有一个单独的Bool称为isVerified_isSet)
注意:我做了几个测试,如果 Default Value 设置为 None 或 NO,那么变量将保存为 false(即使我从未在我的代码中实际分配它) .如果Default Value 设置为YES,则变量将保存为true。尽管如此,这意味着(显然)没有办法在逻辑上将此变量表示为尚未设置。
【问题讨论】:
-
你解决了如何将 Bool 属性表示为尚未设置?
-
@Shamsiddin - Apple 方面没有任何更改/修复 - 因此您仍然需要使用解决方法(帮助程序
isSet属性)或者可能是 Arek 答案中链接的文章中的建议。 -
我认为临时解决方案之一是使用
Integer 16(实体类文件中的NSNumber)和0和1值而不是Boolean(NSNumber)true/false.