書接上文辈灼,RxSwif是所以優(yōu)秀,其API十分精簡(jiǎn)
- 1.創(chuàng)建序列
- 2.訂閱序列
- 3.發(fā)送信號(hào)
//1.創(chuàng)建序列
_ = Observable<String>.create { (obserber) -> Disposable in
//3.發(fā)送信號(hào)
obserber.onNext("我發(fā)送了數(shù)據(jù)信號(hào)")
return Disposables.create()
//2.訂閱徐柳
}.subscribe(onNext:{(text) in
print("訂閱到\(text)")
})
分析代碼:
- 1:創(chuàng)建序列的代碼 Create 后面的 閉包A 里面有 3:發(fā)送信號(hào)民傻,如果要執(zhí)行 發(fā)送信號(hào) ,必然要來(lái)到這個(gè)閉包A
- 2:我們執(zhí)行 2: 訂閱序列 創(chuàng)建了 閉包B
- 3:通過(guò)結(jié)果我們顯然知道拨黔,先執(zhí)行 閉包A 把 數(shù)據(jù) 傳給了 閉包B
可觀察序列的創(chuàng)建是利用協(xié)議拓展功能create實(shí)現(xiàn)的称杨,里面創(chuàng)建了一個(gè) AnonymousObservable(匿名可觀察序列) 命名還是體現(xiàn)了作者的思維 :這個(gè)類就是一個(gè)內(nèi)部類,具備一些通用特性(具有自己功能的類才會(huì)命名) 下面我貼出這個(gè)類的繼承關(guān)系
2.png
extension ObservableType {
// MARK: create
public static func create(_ subscribe: @escaping (AnyObserver<E>) -> Disposable) -> Observable<E> {
return AnonymousObservable(subscribe)
}
}
- 執(zhí)行 create方法時(shí)候創(chuàng)建了一個(gè)內(nèi)部對(duì)象AnonymousObservable
- AnonymousObservable 保存了外界閉包
- AnonymousObservable 繼承了producer 具有subscribe
訂閱序列
這里說(shuō)明這個(gè)訂閱方法 subscribe 和我們上面所說(shuō)的 subscribe 不是同一個(gè)方法
來(lái)自于對(duì) ObservableType 的拓展功能
extension ObservableType {
public func subscribe(onNext: ((E) -> Void)? = nil, ...) -> Disposable {
// 因?yàn)槠?省略不影響我們探索的代碼
let observer = AnonymousObserver<E> { event in
switch event {
case .next(let value):
onNext?(value)
case .error(let error):
if let onError = onError {
onError(error)
}
else {
Hooks.defaultErrorHandler(callStack, error)
}
disposable.dispose()
case .completed:
onCompleted?()
disposable.dispose()
}
}
return Disposables.create(
self.asObservable().subscribe(observer),
disposable
)
}
}
- self.asObservable() 這個(gè)是我們的 RxSwift 為了保持一致性的寫法
- self.asObservable().subscribe(observer)其實(shí)本質(zhì)就是 self.subscribe(observer),通過(guò)可觀察序列的繼承關(guān)系砌烁,我們可以非晨鹪快速的定位 Producer 訂閱代碼
1.png
總結(jié):RxSwift的結(jié)構(gòu)
- 1:就是序列感念,滿世界都是序列 - 編碼統(tǒng)一 函喉,隨時(shí)隨地享用
- 2:通過(guò)函數(shù)式思想吧一些列的需求操作下沉(把開(kāi)發(fā)者不關(guān)心的東西封裝)避归,優(yōu)化代碼,節(jié)省邏輯
- 3:RxSwift最典型的特色就是解決Swift這門靜態(tài)語(yǔ)言的響應(yīng)能力管呵,利用隨時(shí)間維度序列變化為軸線梳毙,用戶訂閱關(guān)心能隨軸線一直保活捐下,達(dá)到訂閱一次账锹,響應(yīng)一直持續(xù)