使用 TRON 实现 RxSwift

Implementing RxSwift with TRON

我正在尝试开始使用 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: { 

    })
}

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

let read = Assessments.readAllWithRx()

开头有两件事:

  1. let read = Assessments.readAllWithRx() 假定函数 return 是同步的
  2. 您发布的 readAllWithRx 的实现没有 return 任何东西。

我从未使用过 TRON,但据我所知,它的 rxResult() return 是一个 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)
})