我已經很長時間的Objective-C開發人員,並在幾周前聽說Realm。另一方面,我一直希望一點一點地向Swift遷移,所以我創建了一個涉及Realm + Swift的小型項目。Swift + Realm新手:問題與一個簡單的Realm對象及其初始化器
這是什麼意思?我是Swift + Realm的新手。
無論如何,我爲一個項目創建了一個小型演示/概念驗證,我認爲它必須更簡單。但Xcode編譯器說不然。
我的問題是與我的對象的初始值(s)之一。
我的意圖很簡單,但顯然Realm需要比我想要的更多的初始化程序。
我境界的一個對象的代碼是這樣的:
import Foundation
import Realm
import RealmSwift
class Partida: Object
{
dynamic var id_partida: String
dynamic var inventario: Inventory?
required init()
{
inventario = Inventory()
id_partida = "id_partida_test"
super.init()
}
required init(value: AnyObject, schema: RLMSchema) {
//fatalError("init(value:schema:) has not been implemented")
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
//fatalError("init(realm:schema:) has not been implemented")
super.init(realm: realm, schema: schema)
}
override class func primaryKey() -> String? {
return "id_partida"
}
}
我原來的代碼只有「正常」的init初始化。但Xcode迫使我創建更多的額外的初始化器(值和領域)。
如果我編譯上面剛剛粘貼的代碼,Xcode會在第二個和第三個必需的初始化器中進行投訴,特別是在super.init部分。 它說:
Property 'self.id_partida' not initialized at super.init call
我明白它的意思,但我不知道如何避免錯誤,因爲如果我刪除這兩個super.init線,在運行時程序崩潰。
如果我取消註釋fatalError行,它們也會在運行時崩潰。
事實上,我不想使用這2個初始值設定項。如果可以的話,我不會添加它們,但顯然Xcode需要。我真正想要添加到我的對象初始化函數中的唯一代碼是「簡單」初始化函數,這是我認爲是代碼的唯一部分。
我想我可能有境界+斯威夫特+初始化一些概念的誤解。
我也有感覺的Xcode迫使我添加代碼,我不需要和/或我也不明白。
上理解任何幫助「所需的初始化」的境界初始化會更受歡迎。
官方境界+斯威夫特文檔超出了我的知識,我甚至不經過重新閱讀他們多次瞭解它的許多概念。
Google和StackOverflow這次沒有真正有用...
謝謝。
你只需要'便利的init'並在裏面添加'self.init()',不需要'需要的初始化' – Tj3n
如果我註釋掉「需要的init」複合初始值設定項(第2和第3),XCode無論如何,7.3都會抱怨。它只是不編譯。如果我在簡單初始化程序之前刪除了「required」關鍵字,則XCode會抱怨:「您需要在所有覆蓋項上使用必需的關鍵字」。 – Isaac
請檢查下面的答案,我希望它可以幫助你ü – Tj3n