RxSwift:Swift的响应式扩展第1部分

在本博文的第一部分中,我们将探索该理论,以便理解RxSwift,尤其是ReactiveX。 在第二部分中,我们将应用此概念来使用RxSwift创建示例iOS应用程序。

什么是反应性扩展?

“ ReactiveX是Observer模式,Iterator模式和函数式编程的最佳创意的结合体”

观察员和演说者?

GoF书中描述的Observer和Iterator模式是生产者/消费者方案中使用的两种模式。

只要迭代器模式实现可迭代的接口,它通常就可以从对象集合中提取数据。 这是一个同步和交互的过程,我正在读取当前值并要求下一个值,直到满意为止或收集结束。

观察者模式用于推送数据,对数据感兴趣的对象将在可用时订阅接收数据。 这是异步的,是无功的,当新数据可供订户使用时,他们会收到数据通知。

ReactiveX探索的是这两种模式之间的对应关系,并统一它们之间的语义(观察者对迭代器是双重的)。

事件,任何地方的事件…

“ Rx是功能世界和命令世界之间的最佳结合点。 它使您能够使用不可变的定义和纯函数以可靠的可组合方式处理可变状态的快照。”

Rx定义了Observable,Observable是一系列元素的序列,可轻松组合异步操作和事件/数据流。

Rx允许我们创建事件/数据流,并使用运算符进行组合和转换。 有一些运算符,例如filter,map,combin,retry,observ,bindTo,zip,throttle。 所有操作员的列表在此处提供:操作员列表。

您还可以订阅任何可观察的流以执行副作用。

Rx在无状态架构下运行良好,数据不需要实际存储在任何地方,它可以从一个系统传递到另一个系统,并应用从纯函数进行的不同转换,即从流转换为另一个流。

在此示例中,我们在GitHub上进行搜索,该示例取自RxSwift。

 让searchResults = searchBar.rx.text.orEmpty 
.throttle(0.3,Scheduler:MainScheduler.instance)
.distinctUntilChanged()
.flatMapLatest {查询-> Observable 在
如果query.isEmpty {
返回.just([])
}

返回搜索GitHub(查询)
.catchErrorJustReturn([])
}
.observeOn(MainScheduler.instance)

我们通过searchBar文本在主线程上创建一个可观察的对象。 为了避免每次文本更改时都发出请求,请限制此流。 流仅在文本实际更改时发送事件。 我们总是会收到用户输入的最新文本,如果文本不为空,我们会发出搜索请求。

我们可以将此搜索结果绑定到表格视图,以显示用户更新搜索时得到的结果。

 搜索结果 
.bindTo(tableView.rx.items(cellIdentifier:“ Cell”)){
(索引,存储库:存储库,单元格)在
cell.textLabel?.text = repository.name
cell.detailTextLabel?.text = repository.url
}
.disposed(作者:disposeBag)

在这里,我们可以看到它正在工作:

资源:

如果要开始使用RxSwift,可以在这里找到一些资源。

反应式宣言

ReactiveX项目

ReactiveX教程

RxSwift项目

Rx Observables的互动图

专家到专家:Brian Beckman和Erik Meijer – .NET Reactive Framework(Rx)内部

响应式编程概述(来自Netflix的Jafar Husain)