在《合并》中,您如何使发布者发送一个价值却从未完成?

时间:2020-05-26 04:07:56

标签: swift combine

在“合并”中,您如何使发布者发送一个价值却从未完成的发布者?

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

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

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

2 个答案:

答案 0 :(得分:2)

也许有一些更好的方法,但是CurrentValueSubject永远不会碰到它的value,就会如您所愿地工作:

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

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

输出:

Value: 1

答案 1 :(得分:1)

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

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