3
我覺得我已經開始了RxSwift的懸念 - 但是我剛剛遇到了障礙。 這是我爲演示製作的一個對象(我在發佈之前已經簡化了它)。我的問題是,當上傳過程中出現網絡錯誤時,所有訂閱都會被處理掉。所以當我再次點擊rightBarButtonItem
時,沒有任何反應。錯誤後重新訂閱Observable
什麼是正確/更好的建模方式?我不確定我是否正確使用了PublishSubject
!
let activityIndicator = ActivityIndicator()
let disposeBag = DisposeBag()
let rx_upload = PublishSubject<Void>()
let rx_progress = PublishSubject<RxProgress>()
let rx_uploadComplete = PublishSubject<Look>()
override init() {
super.init()
activityIndicator
.drive(UIApplication.sharedApplication().rx_networkActivityIndicatorVisible)
.addDisposableTo(disposeBag)
let upload = rx_upload
.debug("Upload")
.flatMapLatest { [unowned self] -> Observable<(JSON?, RxProgress)> in
return self.upload()
}
.share()
upload
.map { $0.1 }
.debug("Upload Progress")
.bindTo(rx_progress)
.addDisposableTo(disposeBag)
upload
.filter { $0.0 != nil }
.map { Post(jsonData: $0.0!) }
.filterNil()
.debug("Upload Complete")
.bindTo(rx_uploadComplete)
.addDisposableTo(disposeBag)
}
func upload() -> Observable<(JSON?, RxProgress)> {
// ...
}
而且在ViewController.swift
...
self.navigationItem.rightBarButtonItem?.rx_tap
.bindTo(postUploader.rx_upload)
.addDisposableTo(disposeBag)