我正在使用RxSwift和RxRealm,并希望能够基于谓词观察资源的变化。功能就是这样
lapply(ToUnite, function(x) unlist(L[x]))
#[[1]]
# [1] 1 2 3 4 5 6 7 8
#[[2]]
# [1] 9 10 11 12 13 14 15 16
但是,Realm要求func observe(type: String) -> Observable<[MyRealmObject]> {
let realm = configureRealm() // 1
let predicate = NSPredicate(format: "type = %@", type)
let resources = realm
.objects(MyRealmObject.self)
.filter(predicate)
return Observable.array(from: resources) // 2
}
在具有运行循环的线程上运行,并且// 2
和// 1
必须在同一线程上调用。
我不能保证在运行循环的线程上已经调用了observe(type:String)函数,所以我可能不得不在函数内切换到一个,但是那样我就不能同步返回值了。
关于如何确保领域观察始终保证在特定运行循环中的任何想法?
我创建了一个具有运行循环的自定义线程,但是获取同步返回值却很丑陋-如您所见,我使用DispatchGroup进行同步,并且我真的很想避免这种情况。
// 2
任何建议将不胜感激!
答案 0 :(得分:1)
您真的必须通过创建可观察对象来分别观察每个数组。我认为最好观察Results
这是查询的结果,而不是像这样观察每个项目。
请参阅here中的示例。
然后您可以将其包装在您自己的可观察对象中,并根据Result中的更改,然后可以对特定对象进行回调。