我为对象集合添加了一个通知。我像下面的代码一样观察它。在更新部分的 switch case 块中,我只能获取已修改对象的索引。但是,我想知道modifiedObject的哪个变量已更改。有办法访问吗?
notificationTokens.conversationMessages = Result?.observe {[weak self] changes in
self?.result = Array(Result!)
if self?.isLoaded == false { return }
switch changes {
case let .update(_, deletions, _, modifications):
if deletions.count > 0 {
self?.updateUI(scrollToEnd: true)
}
default:
break
}
}
答案 0 :(得分:0)
是的,有可能获得插入,删除和更改。但是首先,您需要注意一些事项:
您正在观察的结果集应该是有序查询,有关更多详细信息,请参见docs。作为开发人员,标准取决于您。
也许是一个例子
let mySortedObjects = realm.objects(MyObject.self).sorted(byKeyPath: "createdAt", ascending: true)
case let .update(_, deletions, _, modifications):
语句初始化deletions
,insertions
和modifications
变量,每个变量都是整数数组,因此该语法是modifications: [Int]
的缩写。 。 modifications
数组中包含的整数是集合中已更改元素的索引。
回到case let .update(_, deletions, _, modifications)
语句,您要用_
取消的第一个变量是结果集(与原始查询相同,称为mySortedObjects: Results<MyObject>
),因此您的代码可以更改为
case let .update(results, deletions, _, modifications):
请记住,更改后的元素可以更容易地获得:
case let .update(results, deletions, _, modifications):
for index in modifications {
// modifiedObject is an instance of `MyObject`
let modifiedObject = results[index]
}