领域Swift回调函数
Realm Swift callback function
我使用 swift3 和 Realm 2.3。
交易完成后需要回调
比如我有如下代码,realm数据交易完成后如何回调?
DispatchQueue.main.async {
try! self.realm.write {
self.realm.add(friendInfo, update: true)
}
}
这取决于您为什么需要回调,但是 Realm 可以通过多种方式在数据更改时提供通知。
最常见的 use-case 是当您显示 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: [=10=], section: 0) }),
with: .automatic)
tableView.deleteRows(at: deletions.map({ IndexPath(row: [=10=], section: 0)}),
with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: [=10=], 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 来跟踪特定 属性 更改的时间。
如果所有这些都失败了,如果您有一个非常具体的 use-case 来在 Realm 数据发生变化时收到通知,您也可以使用 NotificationCenter
之类的东西来实现自己的通知。
如果您需要任何其他说明,请follow-up。
事务同步执行。所以您可以在执行交易后立即执行代码。
DispatchQueue.main.async {
try! self.realm.write {
self.realm.add(friendInfo, update: true)
}
callbackFunction()
}
我使用 swift3 和 Realm 2.3。
交易完成后需要回调
比如我有如下代码,realm数据交易完成后如何回调?
DispatchQueue.main.async {
try! self.realm.write {
self.realm.add(friendInfo, update: true)
}
}
这取决于您为什么需要回调,但是 Realm 可以通过多种方式在数据更改时提供通知。
最常见的 use-case 是当您显示 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: [=10=], section: 0) }),
with: .automatic)
tableView.deleteRows(at: deletions.map({ IndexPath(row: [=10=], section: 0)}),
with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: [=10=], 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 来跟踪特定 属性 更改的时间。
如果所有这些都失败了,如果您有一个非常具体的 use-case 来在 Realm 数据发生变化时收到通知,您也可以使用 NotificationCenter
之类的东西来实现自己的通知。
如果您需要任何其他说明,请follow-up。
事务同步执行。所以您可以在执行交易后立即执行代码。
DispatchQueue.main.async {
try! self.realm.write {
self.realm.add(friendInfo, update: true)
}
callbackFunction()
}