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 inprint("---> Received completion: \(completion)")} receiveValue: { value inprint("---> 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 inprint("---> Received completion: \(completion)")} receiveValue: { value inprint("---> Received value: \(value)")}// add second subscriber_ = justPublisher.sink { completion inprint("---> 2 Received completion: \(completion)")} receiveValue: { value inprint("---> 2 Received value: \(value)")}
}

运行结果如下:
在这里插入图片描述
两次订阅的sink方法的回调都被调用了,而且每个Subscriber都只接收到一次数据,然后就调用Completion闭包了。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言: 在当今移动互联网时代,手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性,自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用,提供一份超详细且规范的指南&a…

GPT3.5的PPO目标函数怎么来的:From PPO to PPO-ptx

给定当前优化的大模型 π \pi π,以及SFT模型 π S F T \pi_{SFT} πSFT​ 原始优化目标为: max ⁡ E ( s , a ) ∼ R L [ π ( s , a ) π S F T ( s , a ) A π S F T ( s , a ) ] \max E_{(s,a)\sim RL}[\frac{\pi(s,a)}{\pi_{SFT}(s,a)}A^{\pi_{SFT}}(s,a)] m…

重构大学数学基础_week05_雅各比矩阵与雅各比行列式

这周来讲一下雅各比矩阵和雅各比行列式。 多元函数的局部线性属性 首先我们来回顾一下向量函数,就是我们输入一个向量,输出也是一个向量,我们假设现在有一个向量函数 这个函数意思就是在说,我们在原来的平面上有一个向量(x,y),经…

美团Meitu前端一面,期望27K

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 1、做的主要是什么项目,桌面端的吗? 2、用的主要是什么技术栈?vue有了解吗? 3、移动端开发一般怎么…

使用Ventoy制作U盘启动安装系统

简介 Ventoy是一个制作可启动U盘的开源工具。 无需反复地格式化U盘。你只要制作一次U盘启动盘,后面你只需要把 ISO/WIM/IMG/VHD(x)/EFI 等类型的系统镜像文件直接拷贝到U盘里面就可以启动了,无需其他操作。可以一次性拷贝很多个不同类型的镜像文件&…

vue+element-plus完美实现跨境电商商城网站

目录 一、项目介绍 二、项目截图 1.项目结构图 2.首页 3.中英文样式切换 4.金钱类型切换 5.商品详情 6.购物车 7.登录 ​编辑 8.注册 9.个人中心 三、源码实现 1.项目依赖package.json 2.项目启动 3.购物车页面 四、总结 一、项目介绍 本项目在线预览&am…

提拔你,还是干掉你,从来不是看技术

有读者问我,技术人员工作5~10年就逐渐拉开了差距,这背后的原因是什么?思考片刻后,我回答:是底层能力。 K哥有20年职场经验,从程序员到技术高管一路走来,我总结了技术人员最重要的一些认知和底层…

如何通过小猪APP分发轻松实现Web封装APP

你有没有想过将你的网站或者Web应用变成一个真正的APP?这听起来可能有点复杂,但其实在今天的技术环境下,这已经变得非常简单了。特别是有了像小猪APP分发这样的工具,你可以轻松地将你的Web应用封装成一个APP。 为什么要将Web应用封…

【大数据·hadoop】项目实践:IDEA实现WordCount词频统计项目

一、环境准备 1.1:在ubuntu上安装idea 我们知道,在hdfs分布式系统中,MapReduce这部分程序是需要用户自己开发,我们在ubuntu上安装idea也是为了开发wordcount所需的Map和Reduce程序,最后打包,上传到hdfs上…

ASM-MehotdVisitor实践

使用ASM几乎用户全部的精力都是对MethodVisitor的处理,方法code的处理都需要使用这个类进行操作。还是之前文章说过的,ASM单独学习意义并不大,难以达到触类旁通,先行掌握字节码基础后再玩起ASM才能体会真正的乐趣,不然…

【Kubernetes】k8s 自动伸缩机制—— HPA 部署

一、在K8s中扩缩容分为两种: ●Node层面:对K8s物理节点扩容和缩容,根据业务规模实现物理节点自动扩缩容 ●Pod层面:我们一般会使用Deployment中的Replicas参数,设置多个副本集来保证服务的高可用,但是这是…

前端菜鸡流水账日记 -- git管理工具(多版本)

哈喽哇,我又又又来了,其实之前就挺想进行一篇关于git管理工具的分享的,但是一直都没有来的及,直到今天,在学习的时候,,一个朋友新发现了一个vscode中的小插件,所以我就决定一起来分享…

论文阅读ReLU-KAN和Wav-KAN

这是我读KAN系列论文的第三篇,今天把两篇论文放在一起写,分别是: ReLU-KAN: https://arxiv.org/abs/2406.02075 Wav-KAN: https://arxiv.org/abs/2405.12832 之所以放在一起,是因为这两篇论文针对KAN的…

据说可以防静电和浪涌的P6KE30CA

公司有些变送器之前在最后一道校准时,经常发生烧毁的情况。所以在电路的防反接的M7二极管前面又增加了一个TVS二极管,型号P6KE30CA。但愿加了这个好使把。今天又研究了一下这个TVS管子,把搜索到的东西记录一下。放这里备忘把,忘记…

18.实战 LLaMA2-7B 指令微调

实战 LLaMA2-7B 指令微调 实战 LLaMA2-7B 指令微调大模型训练技术总结以模型训练阶段分类:Pre-Training vs Fine-Tuning以微调权重比例分类:FFT vs PEFT以模型训练方法分类:Fine-Tuning vs Instruction-Tuning以模型训练机制分类:…

【五】Linux软件仓库Yum源--SSH远程控制--SCP远程传输

RPM(红帽软件包管理器) RPM建立统一的数据库文件,记录软件信息并分析依赖关系。目前RPM的优势已经被公众所认可,使用范围也已不局限在红帽系统中了。常见RPM命令如下: 安装软件 rpm -ivh file…

PostgreSQL和Oracle的数据类型对比:时间类型 #PG培训

在数据库管理系统中,时间数据类型是非常关键的一部分。时间数据类型的选择和使用直接影响到数据存储、查询效率和应用程序的设计。本文将对比PostgreSQL和Oracle在时间类型方面的实现和特性。 #PG考试#postgresql培训#postgresql考试#postgresql认证 日期和时间类型…

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…

springSecurity(二):实现登入获取token与解析token

登入生成token 主要思想 springSecurity使用UsernamePasswordAuthenticationToken类来封装用户名和密码的认证信息 代码实现 发起登入请求后&#xff0c;进入到login()方法 /*** 在接口中我们通过AuthenticationManager的authenticate方法来进行用户认证,* 所以需要在Secur…

淘宝镜像地址失效

1. 使用nvm安装node时候报错 报错内容 Get "https://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": tls: failed to verify certificate: x509: certificate has expired or is not yet valid:报错原因 淘宝镜像地址的证书过期了 解决 找到nvm安装的根目…