首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 深入浅出Apple响应式框架Combine

我们通过URLSession内置的dataPublisher发送网络请求解析来说明用法,目的是为了说明Combine中的异步API以及异步API中如何使用Operator。代码示例如下图: ?...1)我们定义了常见的网络请求的错误类型; 2)UserResponse返回的是服务端的json数据Model; 3)判断URL是否有误,如果异常,返回PassthroughSubject生成的订阅者,发送...上图中我们自定义了IntSubscriber,receive(subscription:)方法中最多请求接收2次Value,所以console会输出如下: Received subscription...3.1.1 自定义Subscription 创建Plublisher之前,我们先创建Subscrption,因为Subscription是连接发布者和订阅者的中介者,没有它Combine事件流无法驱动...来给定一个简单的验证规则: 1)当用户输入登录名称大于等于6位; 2)密码和确认密码相等并且至少为6位; 3)用户同意隐私协议; 同时满足上述三个条件时注册按钮才点击可用,我们使用Combine来实现注册校验逻辑

3.6K31
您找到你想要的搜索结果了吗?
是的
没有找到

moya + RxSwift 进行网络请求

): 编译时检查正确的API端点访问....的使用非常简单,通过TargetType协议定义好每个target之后,就可以直接使用Moya开始发送网络请求了。...我选择RxSwift的原因有两个,一个是RxSwift的库相对来说比较轻量级,语法更新相对来说比较少,我之前用过ReactiveCocoa,一些大版本的更新需求重写很多代码,第二个更重要的原因是因为RxSwift...4.配合HandyJSON 实际应用过程中网络请求往往紧密连接着数据层(Model),具体地说,我们的这个例子中,一般我们需要建立一个类用来统一管理数据,然后把得到的 JSON 数据映射到数据层(Model...如果传进来的数据 response 是一个 dictionary,那么就利用 ObjectMapper 的 map方法映射这些数据,这个方法会调用你之前 mapping方法里面定义的逻辑。

1.8K20

MVVM+RxSwift

前言 以前对MVVM的理解和运用觉得很浅薄,项目中用处只是对ViewController减负 没有做数据与View的绑定,没有做到真正的数据驱动视图 没有体现出MVVM易于测试的好处 对于RxSwift...的运用也仅限于网络请求库,RxCocoa的一些优点没有运用到项目 所以是时候项目中使用真正的MVVM了(整理出套路代码),介于项目中已经引入了RxSwift,所以就用它来实现了,在学习本文前可能会要求读者对...MVVM架构图 ViewController 里将数据源绑定到对应的View,这里只是单向绑定,ViewModel进行网络请求等改变数据行为的操作更新Model,再由ViewModel通知View...因为某些业务场景下我们需要保存它,比如在网络请求错误的时候,我希望页面还会继续显示之前有数据的状态,这时候我们就可以在网络请求错误的序列中塞入我们之前保存的数据,这样页面还是显示原样,还有你注意没有这个属性是...createNewGroup:当点击页面上的新建分组按钮会发送一个序列作为ViewModel输入,通过flatMapLatest转换操作进入到下一页完成新建分组的操作,并将结果以序列的形式传回来。

1.4K20

iOS - RxSwift 项目实战记录

Moya/RxSwift // 为RxSwift专用提供,对Alamofire进行封装的一个网络请求库 ObjectMapper // Json转模型之必备良品 RxDataSources...TargetType { /// baseURL 统一基本的URL var baseURL: URL { return URL(string: "http://gank.io/api...的视图显示逻辑、验证逻辑、网络请求等代码存放于ViewModel中,让我们手中的ViewController瘦身。...可以看到我为Output添加了一个序列,类型为我们自定义的LXFSection数组,Input里面添加了一个请求类型(即要请求什么数据,比如首页的数据) 我们通过 transform 方法将input...接着我们根据请求结果,修改output的refreshStatus属性的值 当output的refreshStatus属性的值改变后,会发射信号,由于外界之前已经订阅了output的refreshStatus

2.9K41

函数响应式编程框架RxSwift 学习——Observable

之前iOS开发领域比较火的ReactiveCocoa也是根据Rx来的,所以概念上基本是相同的。GitHub上把代码取下来之后,运行官方的Demo可以看到它的很多用法。...而冷信号则不会,只有它被订阅的时候,它才会发送事件,这可以保证后面即使有订阅者中途加入的时候也能收到完整的事件序列。...除了create,还可以通过never()创建一个什么都不发送的空序列,用empty()创建一个空序列但会发送.Complete等等。...发生变化的时候自动去请求服务端的数据,然后刷新tableview。...throttle保证了事件序列发送的频率不会过快,doOn每次.Next到来之前让我们有机会做些额外的处理,页码变化通过flatMap触发API调用,然后把得到的数据绑定到每个cell上面。

70910

Swift + RxSwift MVVM 模块化项目实践

error) } }) .disposed(by: disposeBag) 上面的代码 通过信号筛选,reloadTrigger代表点击重新加载的事件,经过参数格式化、发送网络请求...RxSwift的使用 ---- 项目中大部分的逻辑处理是借助 RxSwift 实现的响应式编程,当界面上的每个操作都会转换为一个信号然后通过对信号的各种加工网络请求,到返回的数据 JSON 解析以及错误对象的处理...网络请求 ---- NetWorkCore通过对Alamofire简单封装,配合RxSwift可以很简单的实现一个网络请求,并且完成数据解析对应的 Mode 实体类,如下所示,即可实现一个用户登录的网络请求...App 的时候需要考虑处理的,比如在下拉列表的时候,发送网络请求,这时候网络请求失败了,需要界面上展示网络错误,并且显示重新加载的按钮,或者是如果在调用相机获取授权的时用户没有授权的时候,需要提示给用户授权相关的信息...,等等这些逻辑处理都可以通过流的形式处理,处理用户网络错误加载失败的时候,通过 RxSwift 的一个很简单的 Api:withLatestFrom就能实现数据重新加载,而不需要记住各种复杂的参数。

3.1K101

Combine之Backpressure

我们使用订阅者的时候,都是用Sink或者Assign,但是大家有没有想过一个问题,这两种订阅者第一次连接到发布者的时候,会发送一个无限大(unlimited)的需求(Demand)。...Combine 设计思路和 API 等等很多地方都参考了 ReactiveX,特别是具体到 RxSwift 的实现。...所以这时候如果有需要的话,订阅者可以把这个订阅次数保存下来,然后定期去请求元素,就可以很灵活的管理这个发布过程。...比如有一个非常常见的开发场景,我们可以输入框中输入一些内容进行搜索操作,并且一旦输入框的内容改变了,我就去调用接口刷新对应的列表数据,但这个接口调用频率是一定要进行控制的,不然的话。...如果我按住一个英文字母键不放开,输入框会一直变化,就会不停的去调用接口来刷新页面数据,就算你的代码逻辑很好,不会卡顿不会崩溃,你们的后台人员也肯定会骂你,因为平白无故增加了服务器压力,这个时候,就可以用到这个背压的方式来进行控制和处理

57920

RxSwift核心逻辑的理解

原文地址:https://www.jianshu.com/p/0e0703466483 作为ReactiveX家族之一的RxSwiftGithub截止现在Star:16K.为什么这个框架如此受欢迎,作为函数响应式框架典型代表...这一篇文章全面解密 RxSwift核心流程 RxSwift这个优秀的框架,设计的api也是非常精简,让陌生的用户也能非常快速上手 1: 创建序列 2: 订阅序列 3:发送信号 // 1: 创建序列 _...下面是我的代码分析 分析代码: 1:创建序列的代码 Create 后面的 闭包A 里面有 3:发送信号,如果要执行 发送信号 ,必然要来到这个闭包A 2:我们执行 2: 订阅序列 创建了 闭包B 3:通过结果我们显然知道...猜测的真实性,我们开始解读源码来验证 PS: 说实话 RxSwift框架的源码的确比较复杂并且很多,很多基础薄弱或者耐性不够的小伙伴很容易放弃。...但是你看到这篇博客,你有福了:我会快速简短给你介绍,最后面会附上我绘制的思维导图!

1.1K31

解密RxSwift核心逻辑

作为ReactiveX家族之一的RxSwiftGithub截止现在Star:16K.为什么这个框架如此受欢迎,作为函数响应式框架典型代表,底层实现又是如何实现的呢?这一篇文章全面解密 ?...RxSwift核心流程 RxSwift这个优秀的框架,设计的api也是非常精简,让陌生的用户也能非常快速上手 1: 创建序列 2: 订阅序列 3:发送信号 // 1: 创建序列 _ = Observable...下面是我的代码分析 分析代码: 1:创建序列的代码 Create 后面的 闭包A 里面有 3:发送信号,如果要执行 发送信号 ,必然要来到这个闭包A 2:我们执行 2: 订阅序列 创建了 闭包B 3:通过结果我们显然知道...猜测的真实性,我们开始解读源码来验证 PS: 说实话 RxSwift框架的源码的确比较复杂并且很多,很多基础薄弱或者耐性不够的小伙伴很容易放弃。...但是你看到这篇博客,你有福了:我会快速简短给你介绍,最后面会附上我绘制的思维导图!

68510

走进 RxSwift 之冷暖自知

关于标题 言归正传啊,今天还是想跟大家聊一聊 RxSwift之前我写过一篇 走进 RxSwift 之观察者模式,讲解了 RxSwift 的部分实现。...而 CO 则有点“拉模型”的意思,只需要的时候去 pull(subscribe),所以封装网络请求和一些异步操作的时候,可以使用 CO。...实战小剧场 下面我随便举个例子,我们要完成的功能是发送网络请求,将返回的数据显示到一个 TableView 上。...-> Void func request(completion: CompletionHandler) { // ... } } 这是一个非常典型的网络请求回调中处理返回数据...之前 走进 RxSwift 之观察者模式中解释了Observable.empty的实现,虽然那是比较老的版本,不过核心原理是一样的。

2.3K10

RxSwift底层原理及结合MVVM架构项目中的应用

--- 要想充分理解RXSwift核心逻辑,那么首先必须要知道RXSwift里包含哪几个角色,以及它们的职责。...为什么要用它 开发过程中,状态以及状态之间依赖过多, RxSwift更加有效率地处理事件流,而无需显式去管理状态。命令式编程中,状态变化是最难跟踪,最头痛的事。这个也是最重要的一点。...//1:创建序列 let ob = Observable.create { (observer) -> Disposable in // 3:发送信号...+Moya+MVVM 对现有网络请求的改造 由于之前网络请求返回的都是一个对象,接入RxSwift,最好将返回的对象定义为Observable类型,这样我们的业务模块才能方便的订阅返回的数据 extension...MVVM架构模式把业务逻辑从controller集中到了ViewModel中,方便进行单元测试和自动化测试 ViewModel的业务模型如下: viewmodel相当于是一个黑盒子,封装了业务逻辑,进行输入和输出的转换

1.7K10

RXSwift小进阶

RxSwift概念系列入门 上一篇我们整体预览了一下RxSwift的魅力这一讲我们接着详细拆分各个细节性的东西 Single Rx系列中所有的数据都是以信号的形式按照如流水线的实行从前往后行进,我们可以手动创建信号...,然后发送给订阅的的人 let aSingle = Single.create { ( subscribe:(SingleEvent) -> Void) -> Disposable...>的信号,内部通过URLSession实现数据的网络请求,之后咱们通过订阅的形式获取信号事件 //第一种 订阅原始的信号 result.subscribe { (event:SingleEvent...subscribe { (event) in print(event) } subject.onNext("send a Event") 典型的使用就是Hook文本输入事件响应的使用...RXSwift中我们可以简单的将一个信号转化为一个入下的sequence的Observable ?

79820

RxSwift介绍(二)——Observable

Observable介绍 Observable类是RxSwift框架的基础。...打印结果 Observable对象中,可以根据三种事件创建自定义的可观察序列。可观察序列中,分为有限观察序列与无限观察序列。...有限观察序列是指最后以completed或error事件为结尾终结可观察对象的生命周期,最常用的就是网络请求过程,请求数据 -> 不断接收数据触发next事件 -> 数据接收完成completed事件或网络异常数据中断处理...RxSwift中每一个订阅都是唯一的,而且没有一个类似NotificationCenter通知机制 default 这样的全局单例对象。当没有订阅者时,Observable 对象不会发送通知。...创建Observable时,订阅任何不同的观察者之后,代码一定会添加一行 .disposed(by: disposeBag) 代码,而 disposeBag 是之前全局创建生成的let disposeBag

1.4K20

iOS 12 系统中文键盘上使用 AutoFill 会遇到诡异的问题以及解决方案一. 问题描述二. bug report三. 解决方案

count == 6) { //do something 和服务器通讯验证用户输入验证码是否正确 } } 如果系统升级到最新的 iOS 12.0,并结合系统中文键盘使用... iOS 12 设备上使用系统的中文(简体)键盘或者中文(繁体)键盘会打印出以下 log ------value change--- Optional("123456") ---- ------value...使用 RxSwift 会得到同样的结论,下面是使用 RxSwift 的代码片段: textField.rx.text.orEmpty .subscribe(onNext: { text in let...count = text.count if count == 6 { //do something 和服务器通讯验证用户输入验证码是否正确 } }) .disposed(...tfText + string } if text.count == 6 { //do something 和服务器通讯验证用户输入验证码是否正确

1.2K20

翻译翻译什么 tmd 叫“可读”?RxJS实现“搜索”功能

text.addEventListener('keyup', (e) =>{ var searchText = e.target.value; $.ajax({ // 发送请求...这个时候,只能献祭出终极解决方案:本篇主角 —— RxJS 了,其实不止有 JS 的 RxJS,与之对应的还有,RxJava、RxAndroid、RxSwift,它们都是处理异步编程的【核武器库】; RxJS...没错,依然不好懂 ZZZ 不如,换个角度来解释: RxJS 中通常用【弹珠图】来表示“事件流”,比如 map api 的弹珠图如下: switch api 的弹珠图如下: 当发出一个新的内部 Observable...时, switch 会从先前发送的内部 Observable 那取消订阅,然后订阅新的内部 Observable 并开始发出它的值。...我是掘金安东尼,输出暴露输入,技术洞见生活。

54110

RxSwift + MJRefresh 打造自动处理刷新控件状态

这个角色,将逻辑处理、网络请求等繁杂操作中ViewController中抽离出来,ViewController得以瘦身。...使用RxSwift开发时会大量的使用到这种形式,其中就包括我们的网络请求。...结合 iOS - RxSwift 项目实战记录 中所述的“MJRefreshRxSwift中的使用”,output中定义了一个变量 let refreshStatus = Variable<LXFRefreshStatus...面向协议 关于协议的内容可以看下我之前的这两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程(二) 总结协议的两大作用:1、规范 2、定制能力 定义协议 Refreshable...requestCommand.onNext(()) } 接下来再讲讲output,只要有网络请求的地方,就会需要需要监听请求状态,既然这样,那么可以为output定义一个协议OutputRefreshProtocol

1.8K41

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券