Код: Выделить всё
class ViewController: UIViewController {
let disposeBag = DisposeBag()
@IBOutlet weak var clickMe: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
onAction1()
onAction2()
}
func onAction1(){
Observable.just(4)
.flatMapLatest{self.performTask(value: $0)}
.subscribe(onNext:{ data in
print("data is")
print(data)
}, onCompleted: {
print("task completed")
})
.disposed(by: disposeBag)
}
func onAction2(){
clickMe.rx.tap
.map{4}
.flatMapLatest{self.performTask(value: $0)}
.subscribe(onNext:{ data in
print("data is")
print(data)
}, onCompleted: {
print("task completed")
})
.disposed(by: disposeBag)
}
func performTask(value:Int) -> Observable{
return self.skipObservable(value:value)
// need to skip the following flatmap when value is 4
.flatMapLatest{self.multipierObservable(value: $0)}
}
func multipierObservable(value:Int) -> Observable{
return Observable.just(value*value)
}
func skipObservable(value:Int) -> Observable{
return Observable.create { (observer:AnyObserver) -> Disposable in
print("value is", value)
if value == 4{
observer.onCompleted()
}
else {
observer.onNext(value)
observer.onCompleted()
}
return Disposables.create()
}
}
}
Код: Выделить всё
value is 4
task completed
/// output on button tap. Not printing 'task completed' - why?
value is 4
Но когда тот же набор плоских карт вызывается нажатием кнопки, состояние наблюдателя не завершается.
В чем разница между ними?>
Подробнее здесь: https://stackoverflow.com/questions/544 ... atmap-does
Мобильная версия