Realm Objective-CをSwiftから使うときに、NSNumber?なプロパティの初期値をnilにできない
RLMObjectを継承したモデルクラスでNSNumber?のプロパティを用意し、「値:なし」を表現したいので、初期値はnilとしました。
(Objective-Cからも使いたいので、Int?にはできない)
public class MyData: RLMObject { @objc dynamic var myValue: NSNumber? = nil }
実行すると、以下のエラーで止まる
訳(適当):NSNumberは初期値なしでは保持できません。Swift-nativeな型を使うか、初期値を入れてください。
*** Terminating app due to uncaught exception 'RLMException', reason: 'Can't persist NSNumber without default value: use a Swift-native number type or provide a default value.'
- Impossible to create `NSNumber` property with `nil` default value in Swift · Issue #4026 · realm/realm-cocoa · GitHub
- Allow explicitly specifying `NSNumber` property types in Swift by JadenGeller · Pull Request #4027 · realm/realm-cocoa · GitHub
Realm Objective-Cでは、Swift側でNSNumberの初期値をnilにすることはできないみたいです。
また、今後変更もされない様子。
とりあえず NSNumber? -> String? にして対応。
public class MyData: RLMObject { @objc dynamic var myValue: String? }
そもそも、OptionalなNSNumberって、Objective-C側から見えないかもしれない(未確認)。
きっともっと良い解決策はあるはず。