(第一次注意到上: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」。(我現在修改了原來的問題來提一提)。 –