我是RxSwift和反应式编程的新手。这是我的代码:

let disposeBag = DisposeBag()
  let dartScore = PublishSubject<Int>()
  dartScore.asObserver()
    .scan(501, accumulator: {
      intermediate, newValue in
      var result = intermediate - newValue
      return result >= 0 ? result : intermediate
    })
    .do(onNext: {
      if $0 == 0 {
        dartScore.onCompleted()
      }
    })
    .subscribe(onNext:{print($0)}, onCompleted:{print("Game over")})
    .addDisposableTo(disposeBag)

  dartScore.onNext(13)
  dartScore.onNext(60)
  dartScore.onNext(50)
  dartScore.onNext(0)
  dartScore.onNext(0)
  dartScore.onNext(378)

您可能会注意到dartScore.asObserver()。如果删除.asObserver()或将其替换为.asObservable(),则最终结果相同:
488
428
378
378
378
Game over

有谁能帮忙解释一下asObserverasObservableobservable之间的区别,或者什么都不是Subject中的正常对象?

最佳答案

因为aSubject既是一个ObserverType也是一个Observable。当您调用PublishSubject时,PublishSubject不会键入erase fromAnyObservertoasObserver,因此您仍然有一个PublishSubject,因为它是一个Observable,所以仍然可以使用subscribe调用。

关于swift - RxSwift中asObserver,asObservable和none之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39305585/

10-09 08:52