CombineLatest в Combine не уволен - PullRequest
       19

CombineLatest в Combine не уволен

0 голосов
/ 03 февраля 2020
let a = Just("a")
let b = Just("b")
_ = Publishers.CombineLatest(a, b).map { a, b in
    print(a, b)
}

Это мой простой CombineLatest тест. Я вызываю этот метод в onAppear функции. Однако мой print(a,b) не называется. Как мне исправить мой код для запуска print(a, b)?

1 Ответ

1 голос
/ 04 февраля 2020

A Publisher не производит значения, пока ему не будет дано Subscriber. Оператор map не является Subscriber.

. Самое простое решение (упомянутое Саджоном) - использовать sink:

let a = Just("a")
let b = Just("b")
_ = Publishers.CombineLatest(a, b).sink { a, b in
    print(a, b)
}

Обратите внимание, что sink возвращает AnyCancellable, и когда этот AnyCancellable уничтожается, он отменяет подписку. В этом примере _ = означает, что я не сохраняю этот AnyCancellable, поэтому он немедленно уничтожается. Это не имеет значения, потому что все Publisher в этом примере (два Just и CombineLatest) работают синхронно. Они опубликовали все, что когда-либо опубликуют sh до того, как AnyCancellable будет уничтожен. Но в целом вам нужно сохранить AnyCancellable, если вы подписываетесь на Publisher, который может публиковать sh значения асинхронно.

...