2017-03-06 51 views
8

(第一次注意到上:Xcode的8.2.1,iOS裝置10,夫特3) (仍然存在的:Xcode的9測試版3,iOS11,夫特4)如何在Swift中表示Core Data可選的標量(Bool/Int/Double/Float)?

大家都知道的optionals先於Core Data概念和並不嚴格依據optionalsSwift概念。

,我們已經接受了即使Core Data屬性被標記爲Non-optional,自動生成的NSManagedObject子類有一個optional類型:

(有些人沒有不良影響手動刪除?,一些別「噸,但這是題外話)

(從這裏的例子和截圖是Bool性能,但同樣適用於Int16/32/64DoubleFloat

現在我注意到相反 - 時爲Optional(和Use Scalar Type被選擇,其確實的Xcode默認情況下)被標記Bool類型的Core Data屬性,自動生成的類有一個non-optional類型的變量。

這是否有道理?這是一個錯誤嗎?行爲是否記錄在任何地方?

而且最重要的是 - 我該如何代表可選的Bool

我能想到一些變通的,但他們似乎並不理想(例如,不使用標量,但要回BoolNSNumber表示。或(更糟糕),具有獨立的Bool稱爲像isVerified_isSet


注:我做了一對夫婦更多的測試,如果Default Value設置爲NoneNO,那麼變量被保存爲false(即使我從來沒有真正在我的代碼爲它分配)。如果Default Value設置爲YES,則該變量將被保存爲true。儘管如此,這意味着(顯然)沒有辦法從邏輯上將這個變量表示爲尚未設置。

回答

5

我看到同樣的事情,我認爲它是一個錯誤。它沒有記錄在我能找到的任何地方。顯然Core Data在這裏應用了Objective-C風格的假設,其中布爾默認爲NO,整數默認爲0. Core Data/Swift接口有一些粗糙的邊緣,這是我之前沒有考慮過的。

這是一個很好的發現,但我認爲你一直堅持下去,直到蘋果解決它。你已經知道最好的解決方法,我同意這不是很好。我建議提交一個錯誤。

+0

感謝您的回答。實際上,除非你提到它,否則我甚至都沒有意識到所有標量類型都會發生同樣的「問題」,而不僅僅是「Bool」。(我現在修改了原來的問題來提一提)。 –

相關問題