我正在看那两个:
试图创建类似的东西,但没有Moya,使用Alamofire + RxSwift。
首先显然我应该把它放在哪里,因为我的实现分为几个较小的部分。 首先,我有自定义方法来生成被动请求:
static func rx_request<T>(requestConvertible: URLRequestConvertible, completion: (Request) -> Observable<T> ) -> Observable<T> {
let manager: Manager = Manager.sharedInstance
return manager
.rx_request { manager -> Request in
return Alamofire.request(requestConvertible)
}
.flatMap { request -> Observable<T> in
return completion(request)
}
.shareReplay(1)
}
后来由特定的Request
便利类使用。例如,我的UserRequests
有这个私有扩展,可以从它的方法中提取一些常用代码:
private extension Request {
func rx_userRequest() -> Observable<User> {
return self
.validate()
.rx_responseJSON()
.flatMap{ (request, json) -> Observable<User> in
guard
let dict = json as? [ String: AnyObject ],
let parsedUser: User = try? Unbox(dict) else {
return Observable.error(RequestError.ParsingError)
}
return Observable.just(parsedUser)
}
.rx_storeCredentials()
}
}
由于事情的样子我想知道whare的正确地方放置retry
方法以及如何实现它?因为根据位置我可以获得不同的输入参数。
答案 0 :(得分:1)
重试代码必须在第一次尝试之后进行,即rx_responseJSON
所以现在设置方式的方式,它必须在它之间和之后的flatMap
之间。