RxSwift、RxBlocking初嘗試

在Android開發(fā)上,RxJava已經(jīng)是非常重要的組成之一。最近在用Swift開發(fā)iOS應(yīng)用,考慮在架構(gòu)設(shè)計上使用RxSwift。

添加依賴
# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift', '~> 5'
    pod 'RxCocoa', '~> 5'
    pod 'RxBlocking', '~> 5'
end

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
    
    pod 'RxTest', '~> 5'
end
創(chuàng)建 Observable
let observable = Observable<Int>.create { (observer) -> Disposable in
    observer.onNext(1)
    observer.onCompleted()
    return Disposables.create()
}
定義 onError調(diào)用
struct MyError:Error {
    var message = ""
    init(message:String) {
        self.message = message
    }
}
let observable = Observable<Int>.create { (observer) -> Disposable in
    let error = MyError(message: "Test Error")
    observer.onError(error)
    return Disposables.create()
}
subscribe

只定義一個回調(diào)

observable.subscribe({ it in
    print("onNext \(it.element)")
})

定義onNext和onError

observable.subscribe(onNext: { it in
    print("onNext \(it)")
},onError: { error in
    print((error as! MyError).message)
})

定義onNext、onError和onCompleted

observable.subscribe(onNext: { it in
    print("onNext \(it)")
},onError: { error in
    print((error as! MyError).message)
},onCompleted: {

})

RxBlocking

RxBlocking是RxSwift中另外一個單獨(dú)的框架。跟RxTest一樣,也需要進(jìn)行pod引入框架,需要單獨(dú)添加依賴。RxBlocking可以把RxSwift從異步響應(yīng)變成同步。

    pod 'RxBlocking'
do{
    let result = try observable.toBlocking().first()
    print("結(jié)果:\(result)")
}catch{
    print((error as! MyError).message)
}
應(yīng)用場景

比如我們使用RxSwift實(shí)現(xiàn)圖片上傳,在發(fā)布動態(tài)的時候需要先上傳圖片然后調(diào)用基于RxSwift實(shí)現(xiàn)的網(wǎng)絡(luò)請求。加上我們不想嵌套調(diào)用,就可以通過toBlocking同步調(diào)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容