Created
September 12, 2017 05:06
-
-
Save maoyama/ff16f1ce80b8cf45f854e7bbb1d5f32f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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