我正在尝试从一个简单的Int创建一个可观察对象,因此我可以在更改时订阅它,但是它仅在第一次加载时侦听,我想念的是什么?谢谢你。
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()
}
}
答案 0 :(得分:0)
//
var changingValue = PublishSubject<Int>()
//
// let value = self.ratingView.rating()
// changingValue.onNext(value) // inform observers like so
//
private let disposeBag = DisposeBag()
changingValue.asObservable()
.subscribe(onNext: { [weak self] (value) in
print("NAKO \(value)")
})
.disposed(by: disposeBag)
答案 1 :(得分:0)
您需要将评级值转换为值流,如果您使用onCompleted,则该流将完成,因此无需使用onCompleted。
let rating = self.ratingView.rating()
Observable.of(rating)
.subscribe(onNext: { (value: Int) in
print(value)
})
.disposed(by: disposeBag)
答案 2 :(得分:0)
我认为,如果您无权修改原始代码,唯一可以做的就是这样:
class YourRatingView: RatingView {
private let ratingSubject: ReplaySubject<Int>
override var rating: Int {
get { return super.rating }
set {
super.rating = newValue
ratingSubject.on(.next(super.rating))
}
}
override init(){
ratingSubject = ReplaySubject<Int>.create(bufferSize: 1)
super.init()
ratingSubject.on(.next(super.rating))
}
var rating_rx: Observable<Int> {
return ratingSubject.asObservable()
}
}
请注意,我使用的是ReplaySubject
,因此,每次订阅时,您至少会收到最后的评分值。然后,每次更改后,您都会在订阅中收到一个事件。
let ratingView = YourRatingView()
ratingView.rating_rx.subscribe(onNext: { rating in
print(rating)
}).disposed(by: disposeBag)