在 Combine 中,您如何创建一个发送一个值但永远不会完成的发布者?

In Combine how do you make a publisher that sends one value but never completes?

在 Combine 中,如何创建发送一个值但永远不会完成的发布者?

在以下代码中调用了 receiveCompletion,但我不希望它调用:

Just(1)
    .sink(
        receiveCompletion: {
            print("Completion: \([=10=])")
    },
        receiveValue: {
            print("Value: \([=10=])")
    }
)

如何才能只发出一个值但不完整...?

可能有一些更好的方法,但是 CurrentValueSubject,从不触及它的 value,会如您所愿地工作:

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

publisher
    .sink(
        receiveCompletion: {
            print("Completion: \([=10=])")
    },
        receiveValue: {
            print("Value: \([=10=])")
    }
)

输出:

Value: 1

您可以将 Empty(completeImmediately: false) 附加到任何发布者以防止其正常完成。

Just(1)
    .append(Empty(completeImmediately: false))
    .sink(
        receiveCompletion: { print("completion: \([=10=])") },
        receiveValue: { print("value: \([=10=])") })