【问题标题】:How to Instantiate a Realm Results<T> Array如何实例化 Realm Results<T> 数组
【发布时间】:2017-04-03 16:37:46
【问题描述】:

Realm Swift 文档说查询 Results&lt;T&gt; 对象会返回一个数组,但是,当我尝试像这样实例化一个 Results 数组时:var allObjects : Results&lt;Object&gt; = [],我收到一条错误消息,说我不能将 Results 与数组字面量。

我知道 Realm API Reference 说“Results 实例不能直接实例化;”但我想知道是否有某种解决方法。

我想知道,因为我想要一个用空数组实例化的全局变量,并在 UIViewController 类的 viewWillAppear 方法中发生变异。例如:

var allItems : Results<Item> = [] 

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let realm = try! Realm()
    self.allItems = realm.objects(Item.self).sorted(byKeyPath: "description")
}

【问题讨论】:

  • 您能分享一下您想要执行此操作的用例吗?文档很清楚。
  • @dmorrow 我已经更新了我的答案。
  • 一种情况是当谓词导致崩溃和疯狂时,您可能希望使用原始元素,然后将其转换回结果类型以进行观察。

标签: swift realm


【解决方案1】:

Results 是 Realm 提供的一个类型。尽管在外部它表现得像一个数组,但它实际上是一个包含 Realm 的延迟加载机制的抽象,它不会暴露给最终应用程序。因此,第三方应用无法创建 Results 的新实例。

如果您只想保留由 Realm 查询创建的 Results 实例,您可以将其设为可选,而不是尝试抢先实例化它。

var allItems: Results<Item>?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let realm = try! Realm()
    self.allItems = realm.objects(Item.self).sorted(byKeyPath: "description")
}

【讨论】:

    【解决方案2】:

    Results 泛型不是数组。它是可枚举和可下标的,但不是 CollectionType。

    在这种情况下,您不会将allItems 设为可选然后解包吗?

    【讨论】:

    • 感谢您的意见。有没有办法实例化一个 Results 对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2011-01-13
    相关资源
    最近更新 更多