Skip to content

Instantly share code, notes, and snippets.

@maoyama
Created September 12, 2017 05:06
Show Gist options
  • Save maoyama/ff16f1ce80b8cf45f854e7bbb1d5f32f to your computer and use it in GitHub Desktop.
Save maoyama/ff16f1ce80b8cf45f854e7bbb1d5f32f to your computer and use it in GitHub Desktop.
//
// Alamofire+Reactive.swift
// architecture
//
// Created by MakotoAoyama on 9/8/17.
//
import Foundation
import ReactiveSwift
import Alamofire
import Result
private let defaultSessionError = NSError(domain: "Reactivity.Alamofiew.SessionManager.dataWithRequest",
code: 1,
userInfo: nil)
extension SessionManager : ReactiveExtensionsProvider {
}
extension Reactive where Base: SessionManager {
func request(_ url: URLConvertible, method: HTTPMethod, parameters: Parameters?, encoding: ParameterEncoding, headers: HTTPHeaders?) -> SignalProducer<(Data, URLResponse), AnyError> {
return SignalProducer { [base = self.base] observer, lifetime in
let dataRequest = base.request(url, method: method, parameters: parameters, encoding: encoding, headers: headers)
dataRequest.response { (dataResponce) in
if let data = dataResponce.data, let responce = dataResponce.response {
observer.send(value: (data, responce))
observer.sendCompleted()
} else {
observer.send(error: AnyError(dataResponce.error ?? defaultSessionError))
}
}
lifetime.observeEnded {
dataRequest.cancel()
}
dataRequest.resume()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment