swift - RealmSwift 初始化列表 : Cannot specialize a non-generic definition

标签 swift list realm

您好,我有一个异常,例如“无法专门化非通用定义” 当我试图在 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 的外部模块。

我对您提出的错误的推理如下

  1. 在 Realm 中,您发布的内容恰好是 how you're supposed to declare a list
  2. 您的示例是在我的项目上下文中编译的,该项目已经使用了 Realm Lists
  3. 指示的错误表明 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/

相关文章:

ios - iOS 13.4 上未更改的 barTintColor UINavigationBar

swift - 如何切换数据库?

ios - 单个组件的动画打乱了整个 View — SwiftUI

python - 使用Python读取文件中包含多个单词的字符串

python - 检查列表中包含字符串的字符串的最简单方法?

Python 错误 : List Object Not Callable with For Loop

javascript - 错误 : Realm context not found. 您是否在 <RealmProvider/> 中调用了 useRealm()?

swift - 第二次调用 Realm 写入失败

iOS Core Data - 当许多上下文同时保存时如何避免崩溃?

ios - Swift UITextField 填充顶部