RxSwift总结
ReactiveX
(Reactive Extensions
)是通过可观察的流实现异步编程的一种API
,它结合了观察者模式、迭代器模式和函数式编程的精华。RxSwift
是ReactiveX
编程思想的一种实现,几乎每一种语言都会有那么一个Rx[xxxx]
框架,比如 RxJava
,RxJS
等。Rx 可以概括为,对某些数据流(很广,可以是一些事件等)进行处理,使其变成可观察对象(Observable
)序列,这样观察者(observer
)就可以订阅这些序列【观察者模式】。然而对于订阅者来说(observer
)某些选项(items
)并不是自己需要的(需要过滤),某些选项(items
)需要转换才能达到自己的目的【操作符 filter
, map
等】。为了提升用户体验,或其它目的,有些操作需要放到特定的线程去执行,比如 UI 操作需要放到主线程,这就涉及到了调度器【调度器 Scheduler
】。所以Rx可以这样概括,Rx = Observables + LINQ + Schedulers
,其中 LINQ(Language Integrated Query)
语言集成查询,比如那些操作符号。
下图是 RxSwift
的简单的应用,从数组中找出 Lefe_x
并显示到 Label
上。
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global().async {
self.from()
}
}
func from() {
Observable.from(["Lefe", "Lefe_x", "lefex", "wsy", "Rx"])
.subscribeOn(MainScheduler.instance)
.filter({ (text) -> Bool in
return text == "Lefe_x"
})
.map({ (text) -> String in
return "我的新浪微博是: " + text
})
.subscribe(onNext: { [weak self] (text) in
self?.nickNameLabel.text = text
})
.disposed(by: disposeBag)
}
流程如下图所示: