我试图开始使用RxSwift,因此我尝试创建一个执行请求的函数,并尝试实现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()发布于 2017-03-21 12:39:18
一开始有两件事:
let read = Assessments.readAllWithRx()假定函数同步地返回某些内容。我从未使用过TRON,但据我所见,它的rxResult()返回一个Observable<T>,其中T是响应的一种类型。在这种情况下,要获得asynchronously AssesmentResponse,您需要订阅可观察的(顺便说一句,您已经订阅了)。
下面是一个示例-- 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)
})https://stackoverflow.com/questions/42904503
复制相似问题