Swift Combine — JUST Publisher
发布时间
阅读量:
阅读量
过去的文章对Publisher进行了阐述,并说明它们能够持续不断地传递数据流给Subscriber. 通常情况下, Subscriber会一直接收这些数据流,除非接收到finished或error标志而终止接收. 与之不同的是, JUST Publisher仅向每个订阅者发送一次输出,之后就不再继续.
一起来看一下下面的代码。
class JustViewModel: ObservableObject {
func sendMessage() {
let justPublisher = Just("This is a Just publisher")
let cancellable = justPublisher
.sink { completion in
print("---> Received completion: \(completion)")
} receiveValue: { value in
print("---> Received value: \(value)")
}
}
}
struct JustDemo: View {
@StateObject private var viewModel = JustViewModel()
var body: some View {
VStack {
Button("Send Message") {
viewModel.sendMessage()
}
.buttonStyle(BorderedProminentButtonStyle())
}
}
}
在这段代码中新增了一个名为sendMessage的方法,在该函数体内生成了一个Just发布者,并将要发送的数据传递给它。接着使用sink()接口注册订阅者。
当在UI上点击按钮调用这个方法的时候,看一下输出:

显然,在点击触发后,在初始化阶段发送了初始数据;接着又触发了完成处理流程。
Just Publisher仅向每个Subscriber发送一次数据后即调用Completion。
例如,在(sendMessage)方法中添加两个Subscriber实例。
func sendMessage() {
let justPublisher = Just("This is a Just publisher")
// add first subscriber
_ = justPublisher
.sink { completion in
print("---> Received completion: \(completion)")
} receiveValue: { value in
print("---> Received value: \(value)")
}
// add second subscriber
_ = justPublisher
.sink { completion in
print("---> 2 Received completion: \(completion)")
} receiveValue: { value in
print("---> 2 Received value: \(value)")
}
}
运行结果如下:

两次订阅导致sink方法的所有回调均被触发;此外, 每个Subscriber仅接收了一次数据, 并且之后立即执行了```
总的来说,Just Publisher还是比较简单,也比较好理解的。
最后
最后
全部评论 (0)
还没有任何评论哟~
