Swift Combine — JUST Publisher

之前文章介绍的Publisher都是可以连续发送数据的,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())
    }
  }
}

上面的代码中在JustViewModel中添加了一个方法sendMessage,在该方法里面创建了一个Just Publisher,创建的时候直接传入要发送的值,然后通过sink方法添加Subscriber

当在UI上点击按钮调用这个方法的时候,看一下输出:
在这里插入图片描述
很明显,点击后,初始化Just发送了初始化时的值,sink方法的receiveValue闭包调用了,随后也调用了Completion闭包,结束了这次事件流。

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都只接收到一次数据,然后就调用Completion闭包了。

总的来说,Just Publisher还是比较简单,也比较好理解的。

最后,希望能够帮助到有需要的朋友,如果觉得有帮助,还望点个赞,添加个关注,笔者也会不断地努力,写出更多更好用的文章。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 09:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 09:28:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 09:28:01       82 阅读
  4. Python语言-面向对象

    2024-06-18 09:28:01       91 阅读

热门阅读

  1. 如何在Linux服务器使用命令修改bios配置

    2024-06-18 09:28:01       34 阅读
  2. Netty中的Reactor模型实现

    2024-06-18 09:28:01       38 阅读
  3. 富格林:掌握可信出金交易策略

    2024-06-18 09:28:01       38 阅读
  4. 架构模式——事件驱动架构模式

    2024-06-18 09:28:01       26 阅读
  5. LeetCode //C - 179. Largest Number

    2024-06-18 09:28:01       29 阅读
  6. 1327. 列出指定时间段内所有的下单产品

    2024-06-18 09:28:01       29 阅读
  7. Nginx网站服务

    2024-06-18 09:28:01       25 阅读
  8. 【小程序】页面导航

    2024-06-18 09:28:01       31 阅读
  9. ubuntu--安装sogou输入法

    2024-06-18 09:28:01       34 阅读
  10. 【docker】常用指令-表格整理

    2024-06-18 09:28:01       37 阅读
  11. 《Foundation 文本》

    2024-06-18 09:28:01       25 阅读