我正在尝试开始使用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()
答案 0 :(得分:1)
一开始有两件事:
let read = Assessments.readAllWithRx()
假设函数同步返回我从未使用过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)
})