是时候学习 RxSwift 了】的更多相关文章

相信在过去的一段时间里,对 RxSwift 多少有过接触或耳闻,或者已经积累了不少实战经验.此文主要针对那些在门口徘徊,想进又拍踩坑的同学. 为什么要学习 RxSwift 当决定做一件事情时,至少要知道为什么.RxSwift 官网举了几个例子,比如可以统一处理 Delegate, KVO, Notification,可以绑定 UI,方便网络请求的处理等等.但这些更多的是描述可以用 RxSwift 来做什么,跟为什么要使用 RxSwift 还是会有点不同. 我们先来分析下 GUI 编程的本质,我喜…
前言 本篇文章将要学习RxSwift中数学和集合操作符,在RxSwift中包括了: toArray reduce concat toArray 将一个Observable序列转化为一个数组,并转换为一个新的Observable序列发射,然后结束. let disposeBag = DisposeBag() Observable.of(1,2,3,4,5).toArray().subscribe(onNext: {print($0)}).disposed(by: disposeBag) 运行结果:…
前言 本篇文章将要学习RxSwift中过滤和条件操作符,在RxSwift中包括了: filter distinctUntilChanged elementAt single take takeLast takeWhile takeUntil skip skipWhile skipWhileWithIndex skipUntil filter 在Observable序列中只发出满足过滤条件的事件. let disposeBag = DisposeBag() Observable.of(1,2,3,…
前言 本篇文章将要学习RxSwift中四种转换操作符: map flatMap flatMapLatest scan map 通过使用一个闭包函数将原来的Observable序列转换为一个新的Observable序列. let disposeBag = DisposeBag() Observable.of(1,2,3).map({return 10 * $0}).subscribe({print($0)}).disposed(by: disposeBag) 打印结果: next(10) next…
对于RxSwift,我也是初学者,此系列来记录我学习RxSwift的历程! (一) 想必关于Drive大家一定在RxSwift的Demo中看到过,也一定有些不解,抱着一起学习的态度,来了解一下Driver 首先列举一下官方的例子:(我会加上注释方便理解) 此例子的场景大概就是,根据一个输入框的关键字,来请求数据,然后接结果绑定到另一个Label,和TableView中 ### Practical usage example This is an typical beginner example.…
前言 本篇文章我们将学习RxSwift中的错误处理,包括: catchErrorJustReturn catchError retry retry(_:) catchErrorJustReturn 遇到error事件的时候,返回一个值,并且结束.更多详情 let disposeBag = DisposeBag() let sequenceFail = PublishSubject<String>() sequenceFail.catchErrorJustReturn("…
前言 本篇文章将要学习RxSwift中连接操作符. Connectable Observable在订阅时不发射事件消息,而是仅当调用它们的connect()方法时才发射消息,这样就可以等待所有我们想要的订阅者都已经订阅了以后,再开始发出事件消息,这样能保证我们想要的所有订阅者都能接收到事件消息.其实也就是等大家都就位以后,开始发出消息. 在开始学习Connectable Observable之前,让我们来看一个non-connectable operator: let intervar = Ob…
RxSwift 介绍 中文文档 https://beeth0ven.github.io/RxSwift-Chinese-Documentation/ https://medium.com/@DianQK/rxswift-%E4%BB%8B%E7%BB%8D-ce078367c42a RxSwift 是在 Apple 推出 Swift 后, ReactiveX 推出 Reactive Extensions 系列一个实现库.但是学习 RxSwift 不是学习如何使用第三方库,而是学习一个思想. 可能…
RxSwift之路 1#Swift语法知识准备 在开始学习 RxSwift 之前,一定要对 Swift 相关语法有所了解,否则就很难理解为什么可以这样.关于 Swift 的学习其实只要看看 Swift 的官方文档就可够了.我之前也列过一些学习资源:来自一线开发者的Swift学习资源推荐.现在开始进入正题. Swift的优势 想一个有趣的问题,为什么没有 RxObjc 呢?实际上响应式的编程框架对语言还是有些要求的,当然 OC 确实也有一个奠基式的 FRP 框架 ReactiveCocoa.但是客…
RxSwift之路 2#如何开始 第一步当然是把项目clone到本地,github地址:https://github.com/ReactiveX/RxSwift. 官方文档 学习的第一手资源当然是项目提供的文档.在项目的Document目录下放着项目的一些概念说明.看过项目的ReadMe后可以从 Getting Started 开始. 不过如果你之前完全没有接触过响应式编程这种概念,一开始文档可能读的不太懂,多看一些实际使用的 demo 会有更深的体会.响应式的编程思维和在 OC 流行的 Rea…
前言 本篇文章将要学习RxSwift中四种转换操作符: map flatMap flatMapLatest scan map 通过使用一个闭包函数将原来的Observable序列转换为一个新的Observable序列. let disposeBag = DisposeBag() Observable.of(1,2,3).map({return 10 * $0}).subscribe({print($0)}).disposed(by: disposeBag) 打印结果: next(10) next…
前言 本篇文章将要学习RxSwift中过滤和条件操作符,在RxSwift中包括了: filter distinctUntilChanged elementAt single take takeLast takeWhile takeUntil skip skipWhile skipWhileWithIndex skipUntil filter 在Observable序列中只发出满足过滤条件的事件. let disposeBag = DisposeBag() Observable.of(1,2,3,…
前言 本篇文章将要学习RxSwift中连接操作符.Connectable Observable在订阅时不发射事件消息,而是仅当调用它们的connect()方法时才发射消息,这样就可以等待所有我们想要的订阅者都已经订阅了以后,再开始发出事件消息,这样能保证我们想要的所有订阅者都能接收到事件消息.其实也就是等大家都就位以后,开始发出消息. 在开始学习Connectable Observable之前,让我们来看一个non-connectable operator: let intervar = Obs…
前言 本篇文章将要学习RxSwift中数学和集合操作符,在RxSwift中包括了: toArray reduce concat toArray 将一个Observable序列转化为一个数组,并转换为一个新的Observable序列发射,然后结束. let disposeBag = DisposeBag() Observable.of(1,2,3,4,5).toArray().subscribe(onNext: {print($0)}).disposed(by: disposeBag) 运行结果:…
前言 本篇文章我们将学习RxSwift中的错误处理,包括: catchErrorJustReturn catchError retry retry(_:) catchErrorJustReturn 遇到error事件的时候,返回一个值,并且结束.更多详情 let disposeBag = DisposeBag() let sequenceFail = PublishSubject<String>() sequenceFail.catchErrorJustReturn("…
开启RxSwift之旅——开篇 RxSwift 是 ReactiveX 在 Swift 下的实现.ReactiveX 是一个通过使用可观察序列来组合异步和基于事件的程序的库. 很多地方通常把 ReactiveX 称为 “函数响应式编程” ,其实这是不恰当的.ReactiveX 可以是函数式的,可以是响应式的,但是和“函数响应式编程”是不同的概览.一个主要的不同点是“函数响应式编程”是对随着时间不停变化的值进行操作的,而 ReactiveX 对随时间发射的离散值进行操作. 我们先不急着去看 RxS…
不知道大家对throttle这个单词是否看着眼熟,还是说对这个计算机基础概念有很清晰的了解了.今天就来聊聊和throttle相关的一些技术场景. 定义 我经常有一种感觉,对于英语这门语言的语感,会影响我们对于一些关键技术概念的理解.有时候在学习新技术知识的时候,我会先花一些时间去了解术语英文单词的各种语义,在形成强烈清晰的语感之后,再去深入具体的技术语境.throttle也算是个生僻的单词,至少在口语中毕竟少用到,先来看看词义: a device controlling the flow of…
  本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 1.核心概念.     内容概览 前言 核心概念 RxSwift Combine 总结 参考内容   前言   未来已来,只是尚未流行! 响应式编程 这个名词已经久负盛名,但是在实际项目中采用了响应式编程的公司其实不多.如果您有 iOS 开发经历,那么您多半听说过 RxSwift,而 Rx 源自微软.提到Rx,往往也会提到源自微软的 MVVM模式.不过,本文不会讲解 MVVM. 由于 Combi…
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参数是缓冲个数,第三个参数是线程. //该方法简单来说就是缓存 Observable 中发出的新元素,当元素达到某个数量,或者经过了特定的时间,它就会将这个元素集合发送出来. publishSubject.buffer(timeSpan: 1, count: 3, scheduler: MainSchedule…
课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工程 打开 Xcode,File / New / Project.. 在 New Project 向导的第1页,选 iOS / Single View App 在向导的第2页填上 Product Name: RxExample 在向导的第3页选择任意文件夹点击 Create 按钮创建工程 关闭所创建的…
JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. 以下使用 RxSwift + Alamofire 调用该网站的 REST API,获取字符串以及 JSON 数据. GET /posts/1 GET /posts POST /posts PUT /posts/1 DELETE /posts/1 所有 GET API 都返回JSON数据,格式(JSO…
使用 Binder 创建观察者 //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) let blinderObserval:Binder<String> = Binder(label){view,text in view.text = text } scheduleObservable .map{&qu…
 Observable 是 Rx 的根基 官网:http://reactivex.io/ github地址:https://github.com/ReactiveX/RxSwift Observable<T> 这个类就是 Rx 框架的基础,我们可以称它为可观察序列.它的作用就是可以异步地产生一系列的 Event(事件),即一个 Observable<T> 对象会随着时间推移不定期地发出 event(element : T) 这样一个东西. 而且这些 Event 还可以携带数据,它的…
第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:String let singer:String init(name:String,singer:String) { self.name = name self.singer = singer } } extension Music:CustomStringConvertible{ var descr…
//startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startWith(0) .subscribe(onNext:{print($0)}) .disposed(by: disposeBag) /* 0 1 2 3 */ print("\n") //插入多个数据也是可以的 Observable.of(1,2,3) .startWith(0) .start…
//amb基本介绍 //当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素. //并忽略掉其他的 Observables. let psubject0 = PublishSubject<Int>() let psubject1 = PublishSubject<Int>() let psubject2 = PublishSubject<Int>() psubject0.amb(psubje…
//filter:该操作符就是用来过滤掉某些不符合要求的事件. Observable.of(1,2,3,4,5,8).filter({ $0 % 2 == 0 }).subscribe { (event) in print(event.element ?? "nil") }.disposed(by: disposeBag) /* 2 4 8 nil */ print("========================") //distinctUntilChanged…
// 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observable 在运行时能动态地“获得”或者说“产生”出一个新的数据,再通过 Event 发送出去. //比如:订阅一个输入框的输入内容,当用户每输入一个字后,这个输入框关联的 Observable 就会发出一个带有输入内容的 Event,通知给所有订阅者. //这个就可以使用下面将要介绍的 Subjects…
let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a","b","c") ofObserval.subscribe(onNext: { (element) in print(element) }, onError: { (error) in print(error.localizedDescription) }, onC…
有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event. let observal = Observable.of("a","b","c") /* 第一种用法: 我们使用 subscribe() 订阅了一个 Observable 对象. 该方法的 block 的回调参数就是被发出的 event 事件,我们将其直接打印出来. */ let subscrioble = observal.subscri…