为什么使用RxSwift?
我们编写的代码绝大多数都涉及对外部事件的响应。当用户点击操作时,我们需要编写一个@IBAction
事件来响应。我们需要观察通知,以检测键盘何时改变位置。当网络请求响应数据时,我们必须提供闭包来执行。我们使用KVO
来检测变量的变化。所有这些不同的系统使我们的代码增加了不必要地复杂。如果有一个一致的系统来处理我们的所有的调用/响应代码,难道不是更好吗?Rx
就是这样一个系统。
RxSwift
是用于大多数主要语言和平台的响应扩展(即Rx)的正式实现。
概念
每一个Observable
的实例都是一个序列
Observable
序列相比于Swift
序列的关键优势点在于它能够异步地接收元素。这是RxSwift
精髓所在,其他的一切都扩展了这个概念。
Observable(ObservableType)
等效于Sequence
observableType.subscribe(_:)
方法等效于Sequence.makeIterator()
ObservableType.subscribe(_:)
接收一个观察者ObserverType
参数,它将被订阅自动接收由可观察到的序列事件和元素,而不是在返回的生成器上手动调用next()
如果一个Observable
发出一个next
事件(Event.next(Element)
),它还能够继续发出更多的事件。但是,如果一个Observable
发出一个error
事件(Event.error(ErrorType)
)或者一个completed
事件(Event.completed
),那么这个Observable
序列就不能给订阅者发送其他的事件了。
Observables and Observers(又名subscribers -- 订阅者)
除非有订阅者,否则Observable
不会执行它们的闭包。
在下面的例子中,Observable
的闭包将不会被执行,因为没有订阅者订阅。
_ = Observable<String>.create({ (observingString) -> Disposable in
print("the code will not be executed")
observingString.onNext("