如何实例化 Realm Results<T> 数组
Posted
技术标签:
【中文标题】如何实例化 Realm Results<T> 数组【英文标题】:How to Instantiate a Realm Results<T> Array 【发布时间】:2017-04-03 16:37:46 【问题描述】:Realm Swift 文档说查询 Results<T>
对象会返回一个数组,但是,当我尝试像这样实例化一个 Results 数组时:var allObjects : Results<Object> = []
,我收到一条错误消息,说我不能将 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 我已经更新了我的答案。 一种情况是当谓词导致崩溃和疯狂时,您可能希望使用原始元素,然后将其转换回结果类型以进行观察。 【参考方案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 对象?以上是关于如何实例化 Realm Results<T> 数组的主要内容,如果未能解决你的问题,请参考以下文章
给定 T 的字符串表示形式,如何实例化 SomeObject<T> 的实例?