Как Observer.onComplete() работает без onNext в цепочке плоских карт? - нужно ли пропускать все следующие плоские карты?IOS

Программируем под IOS
Ответить
Anonymous
 Как Observer.onComplete() работает без onNext в цепочке плоских карт? - нужно ли пропускать все следующие плоские карты?

Сообщение Anonymous »

См. следующий фрагмент кода:

Код: Выделить всё

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
Я вижу, что для действия 1 наблюдатель.onComplete без наблюдателя.onNext of first skipObservable приводит к тому, что наблюдатель переходит в завершенное состояние, пропуская вторую плоскую карту.
Но когда тот же набор плоских карт вызывается нажатием кнопки, состояние наблюдателя не завершается.
В чем разница между ними?>

Подробнее здесь: https://stackoverflow.com/questions/544 ... atmap-does
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»