RxSwift:观察运算符✅
如果您来自编程背景或具有某种专业知识,那么您一定会碰到Reactive一词,它在当今的编程世界中非常流行。 但是,如果您对它不那么熟悉,那就坐下来,通读全文,以掌握它。 让我们看看文本定义所说的关于响应式编程的内容,
在计算中,反应式编程是一种围绕数据流和变化传播的编程范例。 这意味着应该可以使用所使用的编程语言轻松表达静态或动态数据流,并且底层执行模型将自动通过数据流传播更改。 —维基百科
现在,这似乎是一些繁琐的编程工作,这些工作可能会给您留下查询的余地,但请不要担心,因为我会以一种绝对会让您满意RxSwift的方式向您介绍一些基础知识,所以让我们现在开始。
RxSwift是用于与Swift编程语言进行交互的框架。 该框架旨在通过为跨不同编程语言重复使用的某些任务提供通用词汇表来提供帮助。 从理论上讲,这使您更容易专注于语言本身的语法,而不是浪费时间弄清楚如何将常见任务映射到每种新语言。
您可能会问:“我为什么要使用它?”。 好吧,答案很简单 。 它只是简化了您的工作。 我们可以使用信号来代替通知,这些通知很难测试。 代替在代码中占据很多位置的委托,我们可以编写块并删除多个switch / if。 我们还有KVO,IBAction,输入过滤器,MVVM以及许多其他功能,这些功能可以通过RxSwift顺利处理。 请记住,这并非总是解决问题的最佳方法,但是您一定要知道何时充分利用它。
您可能会将Observable视为代码的智囊团,可以为您完成所有复杂的工作,其中可能包括网络调用,数据库获取,后台任务,庞大的循环函数等。 基本语法如下:
让helloObservable = Observable.just(“ Hello RxSwift”)
一旦完成了数据获取或任何复杂算法的计算,现在就需要显示结果或传递给其他函数进行处理。 您可以通过使用subscription(on:(Event )->())来实现。 如下 :
让helloObservable = Observable.just(“ Hello RxSwift”)let subscription = helloObservable.subscribe {事件在
打印(事件)
}
可观察到的后期完成通过以下三个函数将结果发送给订户:
1.next (值:T)—当一个值或值的集合添加到可观察序列中时,它将向其订阅者发送下一个事件 ,如上所示。 关联的值将包含来自观察者的实际值。
2. error (错误:Error)—如果遇到错误,观察者将发出一个错误事件 。 这也将终止观察者。
3. Completed(完成) —如果观察者正常结束 ,则向其订阅者发送一个Completed事件 。
让subscription = helloSequence.subscribe {事件在
切换事件{
案例.next(让值):
打印(值)
大小写.error(让错误):
打印(错误)
案例完成:
打印(“完成”)
}
}
如果要取消订阅,可以通过在其上调用dispose来取消。 您还可以将订阅添加到D isposebag中 ,这将自动为您取消订阅,如下所示:
//创建一个DisposeBag,以便正确取消订阅
let bag = DisposeBag()//将订阅添加到Dispose Bag中
subscription.addDisposableTo(bag)
有时,您想在订阅者接收到可观察序列之前就对其进行操作,组合或过滤。 下面的块将讨论在反应式编程中使用的基本转换运算符。
转型运营商
1)缓冲
定期将Observable发出的项目收集成束,然后发出这些束,而不是一次发出一个。
请注意,如果源Observable发出
onError
通知,则Buffer会立即传递此通知,而无需先发出正在组装的缓冲区,即使该缓冲区包含源Observable在发出错误通知之前发出的项目也是如此。 。
2)FlatMap
将可观察对象发出的项目转换为可观察项目,然后将这些项目的排放展平为单个可观察项目。 FlatMap运算符通过将您指定的函数应用于源Observable发出的每个项目来转换Observable,其中该函数返回一个本身发射项目的Observable。
3)地图
Map运算符将您选择的功能应用于由源Observable发出的每个项目,并返回一个Observable,该Observable发出这些函数应用程序的结果。
4)扫描
将函数依次应用于Observable发出的每个项目,并发出每个连续的值。 扫描运算符将函数应用于源Observable发出的第一项,然后将该函数的结果作为其自身的第一发射
筛选运算符
1)筛选
“筛选器”运算符通过仅允许通过的项通过条件函数形式指定的条件来筛选Observable。
2)DistinctUntilChanged
如果您只想发出下一事件(如果值从先前事件更改),则需要使用distinctUntilChanged,即,如果您只希望唯一数据而不是重复数据,则可以使用此运算符。
3)反跳
仅在经过特定时间跨度时才从Observable发出一个项目,而不发出另一个项目。 完美的例子
1)StartWith
在开始从源Observable发射项目之前,先发射指定的项目序列。 如果您希望Observable在开始发出通常期望的项目之前发出特定的项目序列,请对其应用StartWith运算符。
2)邮编
如果要将不同的可观察序列发出的项目合并到一个可观察序列中,请使用Zip方法。 Zip将按照严格的顺序运行,因此Zip发出的前两个元素将是第一个序列的第一个元素和第二个序列的第一个元素相结合。 还请记住, Zip只会发出与发出最少项目的源Observables发出的项目数量一样多的项目。
3)合并
您可以使用Merge运算符组合多个Observable的输出,以使它们的行为类似于单个Observable。
就是这个故事,因此,如果您有任何想法和意见,请随时在下面发表评论。 别忘了通过多次拍手来分享您的爱。
您可以在 Twitter,Github,LinkedIn,Facebook 上关注我 。
快乐编码👨💻。