RxSwift领域观察RunLoop中的数组

时间:2018-12-18 13:17:33

标签: ios swift realm grand-central-dispatch rx-swift

我正在使用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

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

您真的必须通过创建可观察对象来分别观察每个数组。我认为最好观察Results这是查询的结果,而不是像这样观察每个项目。

请参阅here中的示例。

然后您可以将其包装在您自己的可观察对象中,并根据Result中的更改,然后可以对特定对象进行回调。