ReactiveXReactive Extensions)是通过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华。RxSwiftReactiveX编程思想的一种实现,几乎每一种语言都会有那么一个Rx[xxxx]框架,比如 RxJavaRxJS 等。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)
}

流程如下图所示: