嗨我有一个例外,例如“不能专门化非泛型定义” 当我试图在Realm对象中初始化List时。有谁知道如何解决这个问题? swift 3.2
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() }
}
答案 0 :(得分:1)
我想在一些背景下给出这个问题的解决方案。在Swift中,命名空间是implicit on a module level。如果您有外部模块,例如RealmSwift,其类型为List
,您仍可以在自己的模块中使用名为List
的类型。您甚至可以拥有多个类型为List
的外部模块。
我提出错误的原因如下
List
s List
是一个有效类型,实际上知道一个名为List.init()
的函数,但编译器告诉你该函数不是通用的此时唯一的答案是假设编译器使用的List
定义与您想要的不同。发生这种情况的唯一方法是,您所在的范围(您的项目或其他类型)也定义了类型List
,因为内部类型优先于外部类型。使用类型嵌套进一步扩展此优先级。如果您希望将Realm的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
}
幸运的是,类型/函数通常是不同的,你不会无意中使用错误的类型/函数而不会遇到最终的错误,例如你遇到的错误。