在 Combine 中,您如何创建一个发送一个值但从未完成的发布者?
Posted
技术标签:
【中文标题】在 Combine 中,您如何创建一个发送一个值但从未完成的发布者?【英文标题】:In Combine how do you make a publisher that sends one value but never completes? 【发布时间】:2020-05-26 04:07:56 【问题描述】:在下面的代码中,receiveCompletion 被调用,但我不希望它:
Just(1)
.sink(
receiveCompletion:
print("Completion: \($0)")
,
receiveValue:
print("Value: \($0)")
)
我怎样才能只发出一个值但不完整...?
【问题讨论】:
【参考方案1】:您可以将Empty(completeImmediately: false)
附加到任何发布者以防止其正常完成。
Just(1)
.append(Empty(completeImmediately: false))
.sink(
receiveCompletion: print("completion: \($0)") ,
receiveValue: print("value: \($0)") )
【讨论】:
【参考方案2】:可能有一些更好的方法,但CurrentValueSubject
永远不会碰它的value
,会按您的预期工作:
let publisher = CurrentValueSubject<Int, Never>(1)
publisher
.sink(
receiveCompletion:
print("Completion: \($0)")
,
receiveValue:
print("Value: \($0)")
)
输出:
Value: 1
【讨论】:
以上是关于在 Combine 中,您如何创建一个发送一个值但从未完成的发布者?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Combine 中最好地创建 @Published 值的发布者聚合?
我如何使用Combine来跟踪UIViewRepresentable类中的UITextField更改?
Swift Combine:缓冲上游值并以稳定的速率发出它们?