2016-04-24 35 views
6

クラスのイニシャライザを提供したいときにRealmを動作させることができません.Xcodeは無限にエラーを提案します。RealmSwiftイニシャライザ - Xcode修正 - それは間違っています。

私は提案に従うと、この

enter image description here

で最後に終わるそれが簡単にエラーに

enter image description here

を見るために作るために代わりにコードスニペットの2枚のスクリーンショットをアップロードすることを決定しましたエラーは「宣言されていないタイプの使用「RLMObjectSchema」

私はRealmSwift

の最新150バージョン

答えて

10

を参照してください。レルムには、照会のためにオブジェクトをインスタンス化するためのデフォルトのイニシャライザが必要です。レルムにクエリーを実行すると、Realmはデフォルトのイニシャライザを内部的に呼び出してオブジェクトをインスタンス化します。

デフォルトの初期化子を上書きすることもできますが、推奨しません。デフォルトのイニシャライザをオーバーライドするとき、Swiftタイプのシステム制限のために、ObjCレイヤから継承された他の必要なイニシャライザをオーバーライドする必要があります。また、RealmRealmSwiftフレームワークの両方をインポートする必要があります。これらのイニシャライザのパラメータには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) 
    } 
+0

おかげでたくさん!したがって、初期化を処理するための推奨される方法は、最初のコードスニペットです。最初のデフォルトのイニシャライザが動作し、続いて便利なinitが実行されます。 – DCDC

+1

はい。初期化を処理するための推奨される方法が最初のコードスニペットです。最初のデフォルトイニシャライザが動作し、続いてコンビニエンスinitが実行されます。 –

1

試してみてください。

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() 
     } 
    } 

    convenience init(isBook: Bool, numberOfPages: Double, isInForeignLanguage: Bool, isFictional: Bool) { 
     self.init() 
     self.isBook = isBook 
     self.numberOfPages = numberOfPages 
     self.isInForeignLanguage = isInForeignLanguage 
     self.isFictional = isFictional 
    } 

    ... 
} 

あなたがいるので、デフォルトの初期化子を省略することはできません。

required convenience init(...) { 
    self.init() 
    ... 
} 

推奨される方法は次のように、memberwiseコンビニエンス初期化子を作成しているhttps://github.com/realm/realm-cocoa/issues/1849

+0

うん、この作品は、しかしdefalut初期化子の導入を省略するどのような方法があり、EQの代わりにダイナミックのvar isBookの:ブール= trueの場合、単に初期化するvar isBookせずに残して:ブール – DCDC

関連する問題