【发布时间】:2019-04-30 07:29:21
【问题描述】:
我试图从一个简单的 Int 创建一个 observable,这样我就可以在更改时订阅它,但它只在第一次加载时监听,我错过了什么?
private func startObserving() {
getRating().subscribe(onNext: { (rating: Int) in
print("NAKO \(rating)")
})
}
private func getRating() -> Observable<Int> {
return Observable.create{ observer in
observer.on(.next(self.ratingView.rating()))
observer.on(.completed)
return Disposables.create()
}
}
【问题讨论】:
-
那是因为您在
observer.on(.next(self.ratingView.rating()))之后立即调用observer.on(.completed)并且当您调用observer.on(.completed)时,该特定可观察对象的所有订阅都将被删除,因为您已明确声明此可观察对象现在已完成发射事件你不能在那个 onservable 上进一步调用onNext -
@SandeepBhandari 我删除了
observer.on(.completed),但我仍然没有得到最新的值 -
那是因为这不是 observables 的工作方式,如果你想每次触发新值,你必须每次在
Observable.create{语句中的 ratingView 评级变化时调用observer.on(.next(self.ratingView.rating()))。你在这里真正需要的是SubjectUser publishSubject。示例 let value = PublishSubject<Int>() and trigger the subject every timeself.ratingView.rating()` 更改。我相信你误解了 observables 的工作原理 -
因为
self.ratingView.rating()来自第三方,只返回简单的 Int 值,我试图观察 int 值是否发生变化