RxSwift - вызывает ли удаление подписки базовую последовательность для передачи onComplete? - PullRequest
0 голосов
/ 01 ноября 2018

Я читаю эту книгу о RxSwift "Реактивное программирование со Swift 4" Пакта (https://www.oreilly.com/library/view/reactive-programming-with/9781787120211/).). В одном разделе книга гласит:

"Утилизация подписки вызовет базовую наблюдаемую последовательность для завершения завершенного события и завершения "

Однако я узнал, что эта фраза неверна. Вот пример:

        let publisher = PublishSubject<Int>() //Create an <Int> sequence
        let subscription1 = publisher.asObservable() //Create 1st subscription
            .debug("Subscription 1")
            .subscribe { (event) in
            print(event)
        }
        let subscription2 = publisher.asObservable() //Create 2nd subscription
            .debug("Subscription 2")
            .subscribe { (event) in
                print(event)
        }
        publisher.onNext(1) //Emit first event
        subscription1.dispose() //Dispose the 1st subscription. According to the phrase above, publisher should emit an onComplete event
        publisher.onNext(2) //Emit second event

Как говорится в моем комментарии в коде, по адресу subscription1.dispose () , publisher должен был генерировать событие onComplete, но на самом деле он все еще может генерировать новые события как обычно при этом вывод:

2018-11-01 19:43:59.796: Subscription 1 -> subscribed
2018-11-01 19:43:59.798: Subscription 2 -> subscribed
2018-11-01 19:43:59.798: Subscription 1 -> Event next(1)
next(1)
2018-11-01 19:43:59.798: Subscription 2 -> Event next(1)
next(1)
2018-11-01 19:43:59.799: Subscription 1 -> isDisposed
2018-11-01 19:43:59.799: Subscription 2 -> Event next(2)
next(2)

Может ли кто-нибудь подтвердить, что мое понимание верно? Или я что-то пропустил за кулисами RxSwift?

Заранее спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

Ваше понимание отмены подписки правильное: удаление подписки не приводит к запуску onComplete. Однако при достижении onComplete или onError он автоматически отписывается (http://reactivex.io/documentation/contract.html раздел подписки и отписки действительно полезен)

...