を参照してください。レルムには、照会のためにオブジェクトをインスタンス化するためのデフォルトのイニシャライザが必要です。レルムにクエリーを実行すると、Realmはデフォルトのイニシャライザを内部的に呼び出してオブジェクトをインスタンス化します。
デフォルトの初期化子を上書きすることもできますが、推奨しません。デフォルトのイニシャライザをオーバーライドするとき、Swiftタイプのシステム制限のために、ObjCレイヤから継承された他の必要なイニシャライザをオーバーライドする必要があります。また、Realm
とRealmSwift
フレームワークの両方をインポートする必要があります。これらのイニシャライザのパラメータにはObjective-C onlyクラスがあるためです。
import RealmSwift
import Realm // Need to add import if you override default initializer!
class Item: Object {
dynamic var isBook: Bool = true
dynamic var numberOfPages: Double = 0
dynamic var isInForeignLanguage: Bool = true
dynamic var isFictional: Bool = true
dynamic var value: Int {
get {
return calculalatedValue()
}
}
required init() {
super.init()
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init(value: AnyObject, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
おかげでたくさん!したがって、初期化を処理するための推奨される方法は、最初のコードスニペットです。最初のデフォルトのイニシャライザが動作し、続いて便利なinitが実行されます。 – DCDC
はい。初期化を処理するための推奨される方法が最初のコードスニペットです。最初のデフォルトイニシャライザが動作し、続いてコンビニエンスinitが実行されます。 –