Realm Swift回调函数

时间:2017-01-23 02:12:51

标签: swift3 realm realm-mobile-platform

我使用swift3和Realm 2.3。

交易完成后我需要回调。

例如,我有一个如下代码,如何在领域数据事务完成后回调?

DispatchQueue.main.async {

     try! self.realm.write {
          self.realm.add(friendInfo, update: true)
     }

}

2 个答案:

答案 0 :(得分:3)

交易是同步执行的。因此,您可以在执行事务后立即执行代码。

DispatchQueue.main.async {
    try! self.realm.write {
        self.realm.add(friendInfo, update: true)
    }

    callbackFunction()
}

答案 1 :(得分:1)

这取决于您需要回调的原因,但Realm可以通过多种方式在数据更改时提供通知。

最常见的用例是当您显示Results对象的项目列表时。在这种情况下,您可以使用Realm's change notifications功能更新特定对象:

let realm = try! Realm()
let results = realm.objects(Person.self).filter("age > 5")

// Observe Results Notifications
notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
  guard let tableView = self?.tableView else { return }
  switch changes {
  case .initial:
    // Results are now populated and can be accessed without blocking the UI
    tableView.reloadData()
    break
  case .update(_, let deletions, let insertions, let modifications):
    // Query results have changed, so apply them to the UITableView
    tableView.beginUpdates()
    tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }),
                       with: .automatic)
    tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}),
                       with: .automatic)
    tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }),
                       with: .automatic)
    tableView.endUpdates()
    break
  case .error(let error):
    // An error occurred while opening the Realm file on the background worker thread
    fatalError("\(error)")
    break
  }
}

Realm对象属性也是KVO-compliant,因此您还可以使用传统的Apple addObserver API来跟踪特定属性的更改时间。

如果您有一个非常具体的用例,如果您有一个非常具体的用例来通知Realm数据更改的时间,您还可以使用NotificationCenter之类的内容实现自己的通知。

如果您需要任何其他说明,请跟进。