美文网首页swift学习资料
RxSwift、RxBlocking初尝试

RxSwift、RxBlocking初尝试

作者: ImWiki | 来源:发表于2019-05-18 15:15 被阅读0次

    在Android开发上,RxJava已经是非常重要的组成之一。最近在用Swift开发iOS应用,考虑在架构设计上使用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
    
    创建 Observable
    let observable = Observable<Int>.create { (observer) -> Disposable in
        observer.onNext(1)
        observer.onCompleted()
        return Disposables.create()
    }
    
    定义 onError调用
    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

    只定义一个回调

    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中另外一个单独的框架。跟RxTest一样,也需要进行pod引入框架,需要单独添加依赖。RxBlocking可以把RxSwift从异步响应变成同步。

        pod 'RxBlocking'
    
    do{
        let result = try observable.toBlocking().first()
        print("结果:\(result)")
    }catch{
        print((error as! MyError).message)
    }
    
    应用场景

    比如我们使用RxSwift实现图片上传,在发布动态的时候需要先上传图片然后调用基于RxSwift实现的网络请求。加上我们不想嵌套调用,就可以通过toBlocking同步调用。

    相关文章

      网友评论

        本文标题:RxSwift、RxBlocking初尝试

        本文链接:https://www.haomeiwen.com/subject/jpgzaqtx.html