| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Combine操作符append和prepend -> 正文阅读 |
|
[移动开发]Combine操作符append和prepend |
swift标准库中有append函数,可以在数组或字符串后添加一个相同类型的数据,比如
在Combi个ine中,也可以使用append来给Publisher在后面增加一个Output,或者增加一个Publisher,同时,Combine还提供了一个prepend操作符,和append相反,他是在前面增加一个Output,或是publisher prepend Output比如我们在playground中实现如下代码
stringPublisher本身的Output是字符串“World!”,经过prepend操作符处理后,他变成了
所以sink接收时,会接收到两次数据,分别是“Hello”和“World!”。 将上面代码改成append后,会变成在后面添加Hello,就不再用代码举例了。 prepend Publisher
stringPublisher是一个字符串数组的publisher subject是Output类型为String的publisher,也可以说是subject,因为subject也是实现了publisher协议的一个类型,他有一个特殊的方法是send,可以通过send来手动发布数据。 在stringPublisher被订阅前,用prepend将subject挂接在stringPublisher的前面,这时候publisher的类型变为了 Publishers.Concatenate<PassthroughSubject<String, Never>, Publishers.Sequence<[String], Never>> Publishers.Concatenate的定义是
所以在之后的sink中,我们依次接收到了两个publisher的Output数据,也就是Run code和Break things! append操作符也是同样,只不过位置和prepend相反,一个在前,一个在后。 实际应用?在实际应用中,可以用在"拼接两个网络请求"的场景,比如我们有两个需要获取的网络数据,分别来自 http://jsonplaceholder.typicode.com/posts/1 json内容为 { "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" } 和?http://jsonplaceholder.typicode.com/posts/2? json内容为 { "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" } 我们需要同时处理两个请求的返回值时,可以使用prepend或append操作符 在playground下使用如下代码:
1、创建JSON返回的数据结构 2、创建两个请求的URL 3、创建获取第一个数据请求的publisher(函数返回值) 4、创建获取第二个数据请求的publisher(函数返回值) 5、同时处理两个数据请求,使用append(getData2())时,打印结果是
可以看出来是先处理了第一个数据请求,再处理第二个数据请求,因为append是在后面添加。 注释掉append行,将prepend行取消注释,打印结果为
先处理了第二个数据请求,再处理第一个数据请求,因为prepend是在前面添加。? 有一点要注意,prepend和append,要求被挂接的Output或publisher,与原publisher的Output类型要相同。对于我们最后一个网络请求的例子,因为两个请求返回的json数据格式是一样的,所以可以用prepend或append来实现。如果json数据格式不一样,并且还需要同时处理的话,则需要使用zip、merge或是combineLeast来实现。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:33:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |