2017-11-16 11 views
0

こんにちは私は「Realmオブジェクトのリストを初期化しようとしているときに非汎用的な定義を特殊化できません」という例外があります。 誰もこの問題を解決する方法を知っていますか?スウィフト3.2RealmSwiftリストを初期化します:非ジェネリック定義を特殊化できません

class Dog: Object { 
    @objc dynamic var name = "" 
    @objc dynamic var age = 0 
} 

class Event : Object{ 
    dynamic var event_id = 0 
    dynamic var date : String? 
    dynamic var name : String? 
    dynamic var remind : Remind? 
    dynamic var event_status = 0 

    let dogs = List<Dog>()  "Cannot specialize a non-generic definition" 

    required convenience init?(map: Map){ self.init() } 
} 
+2

'RealmSwift'をインポートせず、' List'タイプがプロジェクトの別の部分に存在する可能性はありますか?あなたは試してみてください: '聞かせ犬= RealmSwift.List ()' –

+0

ない男、私は輸入: 輸入のUIKit インポートAlamofire インポートが 輸入ObjectMapper 輸入ObjectMapper_Realm 輸入SwiftyJSON 輸入BFKitに –

+0

おかげで多くのことをRealmSwift インポート財団「()」の代わりに「RealmSwift.List ()」が機能しています。しかし、他の私のプロジェクトでは、 "List ()"がうまくいき、混乱しました。 –

答えて

0

私はこの質問にいくつかの文脈の解決策を与えたいと思っていました。 Swiftでは、名前空間はimplicit on a module levelです。 RealmSwiftなどの外部モジュールがあり、タイプがListの場合は、自分のモジュールにListという名前のタイプを割り当てることができます。タイプがListの複数の外部モジュールを使用することもできます。レルムで

  1. を次のように表示されるエラーのため

    私の推論でした、何を掲載することは、正確にhow you're supposed to declare a list

  2. すでに使用されている私のプロジェクトのコンテキストでコンパイル
  3. あなたの例レルムList
  4. です示されたエラーは、迅速なコンパイラがListが有効な型であり、実際にはList.init()という名前の関数を知っていることを知っていることを示していますが、コンパイラはその関数が汎用ではないことを伝えています。

その時点で唯一の答えは、コンパイラが意図しているよりも異なる定義Listを使用していると仮定することです。これが起こる唯一の方法は、内部の型が外部型よりも優先されるため、あなたが入っているスコープ(プロジェクトまたは別の型)が型Listを定義している場合です。この優先順位は、型ネストでさらに拡張されています。レルムのListをデフォルトのリストとして保持する場合は、Listを別の構造体にネストして、ソートの名前空間を提供することができます。

次の例は、複雑な状況を考えてできるだけ簡潔に示しています。幸い

import RealmSwift 

let myGlobalDogs = List() 
let myGlobalNestedListDogs = MyClass.List() 
let globalDogs = RealmSwift.List<Dog>() 

class List { } 

class MyClass { 
    class List { } 

    let dogs = RealmSwift.List<Dog>() 
    let myNestedListDogs = List() // type: MyModule.MyClass.List 
    let myDogs = MyModule.List() // type: MyModule.List 
} 

class MyOtherClass { 

    let dogs = RealmSwift.List<Dog>() 
    let myNestedListDogs = MyClass.List() // type: MyModule.MyClass.List 
    let myDogs = List() // type: MyModule.List 
} 

、タイプ/機能は、通常、あなたは不注意なあなたが遭遇した一人として、最終的にエラーに遭遇することなく、間違ったものを使用することができないことを十分に異なっています。

関連する問題