내 네트워킹 레이어에 대한 반응식 확장 기능을 만드는 동안 패턴을 발견했습니다. 향후 구현을 위해 내 논리를 간단하게 추출하고 싶습니다. 방법 중 몇이 하나에 비슷한 : 네트워킹 주위에 반응식 래퍼 만들기
static func create(params: [ String: AnyObject ]) -> Observable<Type> {
return Observable<Type>.create { observer -> Disposable in
let request = Alamofire.request(TypeAPI.Create(params: params).responseJSON { response in
switch response.result {
case .Success(let value):
guard response.response?.statusCode != 409 else {
observer.onError(RequestError.TypeAlreadyExists)
return
}
guard let dict = value as? [ String: AnyObject ] else {
observer.onError(RequestError.ParsingError)
return
}
guard let parsedType: Type = try? Unbox(dict) else {
observer.onError(RequestError.MappingError)
return
}
observer.onNext(parsedType)
case .Failure(let error):
observer.onError(RequestError.convert(error))
}
}
return AnonymousDisposable {
request.cancel()
}
}
}
그리고 예를 AnonymousDisposable
일에 대한
RxAlamofire
구현을 살펴본 결과
rx_request
method은 기본적으로 매우 친숙한 패턴을 따르고 있지만 실제로 현재 래퍼와 함께
RxAlamofire
을 사용하려고하면 조금 갇혀 있습니다. 지금까지 내가 좋아하는 뭔가를 종료했습니다
static func rx_create(params: [ String: AnyObject ]) -> Observable<Type> {
let manager: Manager = Manager.sharedInstance
manager.rx_request { manager -> Request in
return Alamofire.request(TypeAPI.Create(params: params))
}
}
그러나 rx_request
반환 Observable<Request>
나는 Observable<Type>
이 필요합니다. 내가 가서 .flatMap
을 추가하면 AnonymousDisposable
으로 다시 마무리 할 것입니다 ...
어떤 제안이 올바른 접근법입니까? 내가 어딘가 근처에 있니? 아니면 완전히 잘못된 방향으로 가고 있습니까?