2017-03-06 6 views
8

(最初に気づいた:Xcodeの8.2.1、iOSの10、スウィフト3) (のようにまだ存在:Xcodeの9ベータ3、iOS11、スウィフト4)SwiftのCore Dataオプションのスカラー(Bool/Int/Double/Float)の表現方法?

我々はすべて知っているoptionals先行のCore Dataコンセプトことと厳密にSwiftの概念に結びついていません。optionals

そして、私たちはCore Data属性がNon-optionalとしてマークされている場合でも、自動生成NSManagedObjectサブクラスはoptionalタイプがあることを受け入れている:

(一部の人は手動で悪影響なしで?を削除し、いくつかのドン「tは、それはポイントの横にあります)

(ここでは一例とスクリーンショットONからBool性質のためですが、同じことがInt16/32/64DoubleFloatのために行く)

は今、私は逆に気づいた - タイプBoolCore Data属性はOptionalとしてマークされている(とUse Scalar Typeは、Xcodeのは、デフォルトではありませんこれは、選択されている)、自動生成されたクラスは、non-optional型の変数を持っています。

これは理にかなっていますか?バグですか?行動はどこに文書化されていますか?

さらに重要なことは、実際にはどのようにオプションのBoolを実際に表しているのですか?

私はいくつかの回避策を考えることができ、彼らは理想的ないないようだ(例えばスカラーを使用しますが、バックBoolNSNumber表現するつもりはありません。あるいは、(さらに悪い)isVerified_isSetのような別のBoolと呼ばれるものを持ちます)


注:私はカップルより多くのテストを行なったし、Default ValueNoneまたはNOに設定されている場合、その変数がfalseとして保存されます(私は実際に私のコードでそれを割り当てることがない場合でも)。 Default ValueYESに設定されている場合、変数はtrueとして保存されます。それでも、これは、(明らかに)この変数をまだ設定されていないものとして論理的に表現する方法がないことを意味します。

答えて

5

私は同じことを見て、私はそれをバグと見なします。私が見つけることができるところはどこにも書かれていません。明らかにCore DataはObjective-Cスタイルの前提を適用しています。ここでブール値のデフォルトはNO、整数のデフォルトは0です。Core Data/Swiftインターフェイスには荒いエッジがあります。これはこれまで考えていなかったものです。

それは良い発見だが、Appleがそれに対処するまで、あなたはそれに固執していると思う。あなたはすでに最良の回避策を知っていますが、私はそれが偉大ではないと同意します。私はバグを提出することをお勧めします。

+0

あなたの答えをありがとう。実際にあなたがそれを言及するまで、私は、同じ「問題」がすべてのScalarタイプで起こることに気付かず、「Bool」だけではありません。(私は今、それを言及する元の質問を修正した)。 –

関連する問題