TL;DR
convenience initializerを使う
まずサポートされてない
とても単純ですが
RealmのObjectはObject.init()のoverrideはサポートされていません。
参考:Support overriding Object.init() #1849
実際、
import RealmSwift
class Dog: Object {
var name: String!
init(name: String) {
}
}
みたいなことをすると、designated initializerもかけ〜、みたいに怒られて、どんどん追加して、結局エラーみたいなことになります。
・・・
required init(value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
required init(value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
required init(value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
required init(value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
・・・
ので、そういうときは、convenience initializerを使います。
サンプル
import RealmSwift
class Dog: Object {
var name: String!
convenience init(name: String) {
self.init()
self.name = name
}
}
overrideのときと違って、 親クラスのではなく、自分のイニシャライザを呼びます。
こちらの記事が詳しいです:[Swift] クラスのイニシャライザ3: Designated Initializer と Convenience Initializer
とはいえ
自分はいつも基本的にRealmに書き込むと思うので、
class func create(name: String) throws -> Dog {
let realm = try Realm()
let d = Dog()
d.name = name
try realm.write {
realm.add(d)
}
return d
}
みたいにすることのほうが多いです。参考まで。