Ich fühle mich wie ich den Dreh RxSwift zu bekommen fange an - jedoch habe ich traf nur eine Straßensperre. Hier ist ein Objekt, das ich für eine Demo erstellt habe (ich habe es vereinfacht, bevor es auf SO hochgeladen wurde). Mein Problem ist, dass bei einem Netzwerkfehler während des Hochladevorgangs alle Abonnements entsorgt werden. Wenn ich also wieder auf rightBarButtonItem
tippe, passiert nichts.Re-Anmeldung zu einer beobachtbaren nach Fehler
Was ist der richtige/bessere Weg, dies zu modellieren? Ich bin mir nicht sicher, ob ich die Verwendung von PublishSubject
s richtig verstanden habe!
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)> {
// ...
}
Und in ViewController.swift
...
self.navigationItem.rightBarButtonItem?.rx_tap
.bindTo(postUploader.rx_upload)
.addDisposableTo(disposeBag)