(首次注意到:Xcode 8.2.1,iOS 10,Swift 3) (仍然存在于:Xcode 9 beta 3,iOS11,Swift 4)
我们都知道Core Data
中的optionals
概念先于并不严格绑定于Swift
中的optionals
概念。
即使将Core Data
属性标记为Non-optional
,我们也已经接受了自动生成的NSManagedObject
子类具有optional
类型的事实:
(有些人手动删除?
而没有任何负面影响,而有些人则不这样做,但这并不重要)
(从这里开始,示例和屏幕截图适用于Bool
属性,但同样适用于Int16 / 32/64
,Double
,Float
)
Bool
的Core Data
属性标记为Optional
(并且选择了Use Scalar Type
,这是Xcode默认的),自动生成的类具有非可选类型的变量。
这是否有意义?这是一个错误吗?这种行为在哪里有记录?
最重要的是 - 我如何表示可选的Bool
?
我可以想到一些解决方法,但它们似乎并不理想(例如,不使用标量,而是回到Bool
的NSNumber
表示。或者(更糟糕的是)有一个单独的名为isVerified_isSet
的Bool
)
注意:我做了几个测试,如果“默认值”设置为“None”或“NO”,那么即使我在代码中从未实际分配变量,该变量也会保存为“false”。 如果“默认值”设置为“YES”,则变量将保存为“true”。 但是,这意味着(显然)没有办法逻辑地表示此变量尚未设置。
isSet
属性)或者可能使用Arek答案中链接文章中的建议。 - Nikolay SuvandzhievInteger 16
(NSNumber
)来代替Boolean
(NSNumber
)的true/false
,并将其值设为0
和1
。 - Shamsiddin Saidov