В Combine, как сделать издателя, который отправляет одно значение, но никогда не завершает? - PullRequest
0 голосов
/ 26 мая 2020

В Combine, как сделать издателя, который отправляет одно значение, но никогда не завершает?

В следующем коде вызывается receiveCompletion, но я не хочу, чтобы это происходило:

Just(1)
    .sink(
        receiveCompletion: {
            print("Completion: \($0)")
    },
        receiveValue: {
            print("Value: \($0)")
    }
)

Как я могу выдать только одно значение, но не полное ...?

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Могут быть и другие способы получше, но CurrentValueSubject, никогда не касаясь его value, будет работать так, как вы ожидаете:

let publisher = CurrentValueSubject<Int, Never>(1)

publisher
    .sink(
        receiveCompletion: {
            print("Completion: \($0)")
    },
        receiveValue: {
            print("Value: \($0)")
    }
)

Выходы:

Value: 1
1 голос
/ 26 мая 2020

Вы можете добавить Empty(completeImmediately: false) к любому издателю, чтобы предотвратить его нормальное завершение.

Just(1)
    .append(Empty(completeImmediately: false))
    .sink(
        receiveCompletion: { print("completion: \($0)") },
        receiveValue: { print("value: \($0)") })
...