Created
January 14, 2016 05:31
-
-
Save mishagray/e269ca2e72d723847f4b to your computer and use it in GitHub Desktop.
FutureKit+AlamoFire.swift
This file contains 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
// | |
// FutureKit+AlamoFire.swift | |
// | |
// Created by Michael Gray on 9/21/15. | |
// | |
import Foundation | |
import Alamofire | |
import FutureKit | |
extension Request { | |
// so AlamoFire uses V as the Value Type and T as the serializer type. Letters gotta match here or swift 2.0 gets superconfused. | |
func future<T: ResponseSerializerType>(responseSerializer s: T) -> Future<T.SerializedObject> { | |
let p = Promise<T.SerializedObject>() | |
p.onRequestCancel { _ in | |
self.cancel() // AlamoFire will send NSURLErrorDomain,.NSURLErrorCancelled error if cancel is successful | |
return .Continue // wait for NSError to arrive before canceling future. | |
} | |
self.response(queue: nil, responseSerializer: s) { response -> Void in | |
switch response.result { | |
case let .Success(t): | |
p.completeWithSuccess(t) | |
case let .Failure(error): | |
let e = error as NSError | |
if (e.domain == NSURLErrorDomain) && (e.code == NSURLErrorCancelled) { | |
p.completeWithCancel() | |
} | |
else { | |
p.completeWithFail(error) | |
} | |
} | |
} | |
return p.future | |
} | |
func futureNSData() -> Future<NSData> { | |
return future(responseSerializer:Request.dataResponseSerializer()) | |
} | |
// uses NSJSONSerialization | |
func futureJSONObject(options: NSJSONReadingOptions = .AllowFragments) -> Future<AnyObject> { | |
return future(responseSerializer:Request.JSONResponseSerializer(options: options)) | |
} | |
func futureString(encoding: NSStringEncoding? = nil) -> Future<String> { | |
return future(responseSerializer:Request.stringResponseSerializer(encoding: encoding)) | |
} | |
func futurePropertyList(options: NSPropertyListReadOptions = []) -> Future<AnyObject> { | |
return future(responseSerializer:Request.propertyListResponseSerializer(options: options)) | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment