(第一次注意到上:Xcode的8.2.1,iOS装置10,夫特3) (仍然存在的:Xcode的9测试版3,iOS11,夫特4)如何在Swift中表示Core Data可选的标量(Bool/Int/Double/Float)?
大家都知道的optionals
先于Core Data
概念和并不严格依据optionals
的Swift
概念。
,我们已经接受了即使Core Data
属性被标记为Non-optional
,自动生成的NSManagedObject
子类有一个optional
类型:
(从这里的例子和截图是Bool
性能,但同样适用于Int16/32/64
,Double
,Float
)
现在我注意到相反 - 时为Optional
(和Use Scalar Type
被选择,其确实的Xcode默认情况下)被标记Bool
类型的Core Data
属性,自动生成的类有一个non-optional
类型的变量。
这是否有道理?这是一个错误吗?行为是否记录在任何地方?
而且最重要的是 - 我该如何代表可选的Bool
?
我能想到一些变通的,但他们似乎并不理想(例如,不使用标量,但要回Bool
的NSNumber
表示。或(更糟糕),具有独立的Bool
称为像isVerified_isSet
)
注:我做了一对夫妇更多的测试,如果Default Value
设置为None
或NO
,那么变量被保存为false
(即使我从来没有真正在我的代码为它分配)。如果Default Value
设置为YES
,则该变量将被保存为true
。尽管如此,这意味着(显然)没有办法从逻辑上将这个变量表示为尚未设置。
感谢您的回答。实际上,除非你提到它,否则我甚至都没有意识到所有标量类型都会发生同样的“问题”,而不仅仅是“Bool”。(我现在修改了原来的问题来提一提)。 –