如何实例化领域结果<t>数组

时间:2017-04-03 16:37:47

标签: swift realm

Realm Swift文档说查询Results<T>对象会返回一个数组,但是,当我尝试实例化一个这样的结果数组:var allObjects : Results<Object> = []时,我收到一个错误,说我不能将结果与数组文字一起使用。

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

我很想知道因为我想要一个用空数组实例化的全局变量,并在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")
}

2 个答案:

答案 0 :(得分:3)

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")
}

答案 1 :(得分:0)

Results泛型不是数组。它的枚举和可订阅但不是CollectionType。

在这种情况下你不会让allItems成为可选项然后解包吗?