用TRON实现RxSwift

时间:2017-03-20 13:11:21

标签: rx-swift

我正在尝试开始使用RxSwift,因此我尝试创建一个执行请求的函数,并尝试实现TRON附带的rxResult()函数,即我使用的HTTP库。但是关于这方面的文档并不十分详细。任何人都可以指出我在做错的方向上正确的方向吗?这是我写的功能:

static func readAllWithRx() {
    let token = UserDefaults.standard.value(forKey: Constants.kTokenUserDefaultsKey) as! String
    let url = URL(string: "api/url")!
    let request: APIRequest<AssessmentResponse, MyAppError> = APIHelper.tron.request(url.absoluteString)

    _ = request.rxResult().subscribe(onNext: { AssessmentResponse in
        print("RX AssessmentResponse \(AssessmentResponse)")
    }, onError: { Error in

    }, onCompleted: { 

    }, onDisposed: { 

    })
}

最后,我尝试使用以下方法在我的Controller中调用此请求:

let read = Assessments.readAllWithRx()

1 个答案:

答案 0 :(得分:1)

一开始有两件事:

  1. let read = Assessments.readAllWithRx()假设函数同步返回
  2. 您发布的readAllWithRx的实现不会返回任何内容。
  3. 我从未使用过TRON,但据我所知,rxResult()会返回Observable<T>,其中T是一种响应。在这种情况下,要获得asynchronously AssesmentResponse,您需要订阅observable(正如您已经做过的那样)。

    以下是一个示例 - readAllWithRx的更新实现(可能无法编译,在记事本中编写代码):

    static func readAllWithRx() -> Observable<AssessmentResponse> {
        let token = UserDefaults.standard.value(forKey: Constants.kTokenUserDefaultsKey) as! String
        let url = URL(string: "api/url")!    
        let request: APIRequest<AssessmentResponse, MyAppError> = APIHelper.tron.request(url.absoluteString)
        return request.rxResult()
    }
    

    然后,如果您需要在代码中的某处获得AssessmentResponse:

    Assessments.readAllWithRx().subscribe(onNext: { result in
        // your response here
        print(result)
    })