Skip to content

Instantly share code, notes, and snippets.

@joelmarquez90
Last active March 16, 2018 06:46
Show Gist options
  • Save joelmarquez90/4b06ef95b7b6b349ca3138fae754fa28 to your computer and use it in GitHub Desktop.
Save joelmarquez90/4b06ef95b7b6b349ca3138fae754fa28 to your computer and use it in GitHub Desktop.
import Moya
import ReactiveSwift
class BaseViewModel<Element: Codable> {
var value: Element? {
didSet {
valueDidSet()
}
}
let moyaProvider: MoyaProvider<Service>?
init(provider: MoyaProvider<Service> = MoyaProvider<Service>()) {
moyaProvider = provider
}
public func fetchData(service: Service) -> SignalProducer<Element, MoyaError> {
return SignalProducer<Element, MoyaError> { observer, disposable in
self.moyaProvider?.request(service, completion: { result in
switch result {
case let .success(response):
if response.statusCode >= 200 && response.statusCode <= 300 {
let mapResult = SignalProducer { try response.map(Element.self) }
mapResult.startWithResult({ result in
switch result {
case let .success(element):
self.value = element
observer.send(value: element)
observer.sendCompleted()
case let .failure(mappingError):
observer.send(error: MoyaError.objectMapping(mappingError, response))
}
})
} else {
observer.send(error: MoyaError.statusCode(response))
}
case let .failure(error):
observer.send(error: error)
}
})
}
}
public func valueDidSet() {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment