您好,我有一个异常,例如“无法专门化非通用定义” 当我试图在 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() }
}
最佳答案
我想为这个问题的解决方案提供一些背景信息。在 Swift 中,命名空间是 implicit on a module level .如果你有外部模块,比如 RealmSwift,它有一个 List
类型,你仍然可以在你自己的模块中有一个名为 List
的类型。您甚至可以拥有多个类型为 List
的外部模块。
我对您提出的错误的推理如下
- 在 Realm 中,您发布的内容恰好是 how you're supposed to declare a list
- 您的示例是在我的项目上下文中编译的,该项目已经使用了 Realm
List
s - 指示的错误表明 swift 编译器知道
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
}
幸运的是,类型/函数通常差异很大,您不会无意中使用错误的而最终不会遇到错误,例如您遇到的错误。
关于swift - RealmSwift 初始化列表 : Cannot specialize a non-generic definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336691/