Skip to content
This repository has been archived by the owner on Jul 3, 2022. It is now read-only.

Commit

Permalink
swift 1.2 allows for more overloaded functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomvis committed Feb 10, 2015
1 parent 0a01feb commit e38a69c
Showing 1 changed file with 12 additions and 44 deletions.
56 changes: 12 additions & 44 deletions BrightFutures/Future.swift
Expand Up @@ -52,6 +52,10 @@ public func future<T>(context c: ExecutionContext, task: () -> Result<T>) -> Fut
return promise.future
}

func executionContextForCurrentContext() -> ExecutionContext {
return toContext(NSThread.isMainThread() ? Queue.main : Queue.global)
}

public let BrightFuturesErrorDomain = "nl.thomvis.BrightFutures"

public enum ErrorCode: Int {
Expand Down Expand Up @@ -116,10 +120,6 @@ public class Future<T> {

self.callbacks.removeAll()
}

private func executionContextForCurrentContext() -> ExecutionContext {
return toContext(NSThread.isMainThread() ? Queue.main : Queue.global)
}
}

/**
Expand Down Expand Up @@ -285,12 +285,8 @@ public extension Future {
* This extension contains all methods for registering callbacks
*/
public extension Future {

public func onComplete(callback: CompletionCallback) -> Future<T> {
return self.onComplete(context: executionContextForCurrentContext(), callback: callback)
}

public func onComplete(context c: ExecutionContext, callback: CompletionCallback) -> Future<T> {
public func onComplete(context c: ExecutionContext = executionContextForCurrentContext(), callback: CompletionCallback) -> Future<T> {
let wrappedCallback : Future<T> -> () = { future in
if let realRes = self.result {
c {
Expand All @@ -314,11 +310,7 @@ public extension Future {
return self
}

public func onSuccess(callback: SuccessCallback) -> Future<T> {
return self.onSuccess(context: executionContextForCurrentContext(), callback: callback)
}

public func onSuccess(context c: ExecutionContext, callback: SuccessCallback) -> Future<T> {
public func onSuccess(context c: ExecutionContext = executionContextForCurrentContext(), callback: SuccessCallback) -> Future<T> {
self.onComplete(context: c) { result in
switch result {
case .Success(let val):
Expand All @@ -331,11 +323,7 @@ public extension Future {
return self
}

public func onFailure(callback: FailureCallback) -> Future<T> {
return self.onFailure(context: executionContextForCurrentContext(), callback: callback)
}

public func onFailure(context c: ExecutionContext, callback: FailureCallback) -> Future<T> {
public func onFailure(context c: ExecutionContext = executionContextForCurrentContext(), callback: FailureCallback) -> Future<T> {
self.onComplete(context: c) { result in
switch result {
case .Failure(let err):
Expand All @@ -353,11 +341,7 @@ public extension Future {
*/
public extension Future {

public func flatMap<U>(f: T -> Future<U>) -> Future<U> {
return self.flatMap(context: executionContextForCurrentContext(), f: f)
}

public func flatMap<U>(context c: ExecutionContext, f: T -> Future<U>) -> Future<U> {
public func flatMap<U>(context c: ExecutionContext = executionContextForCurrentContext(), f: T -> Future<U>) -> Future<U> {
let p: Promise<U> = Promise()
self.onComplete(context: c) { res in
switch (res) {
Expand All @@ -370,11 +354,7 @@ public extension Future {
return p.future
}

public func flatMap<U>(f: T -> Result<U>) -> Future<U> {
return self.flatMap(context: executionContextForCurrentContext(), f: f)
}

public func flatMap<U>(context c: ExecutionContext, f: T -> Result<U>) -> Future<U> {
public func flatMap<U>(context c: ExecutionContext = executionContextForCurrentContext(), f: T -> Result<U>) -> Future<U> {
return self.flatMap(context: c) { value in
Future.completed(f(value))
}
Expand All @@ -401,11 +381,7 @@ public extension Future {
return p.future
}

public func andThen(callback: Result<T> -> ()) -> Future<T> {
return self.andThen(context: executionContextForCurrentContext(), callback: callback)
}

public func andThen(context c: ExecutionContext, callback: Result<T> -> ()) -> Future<T> {
public func andThen(context c: ExecutionContext = executionContextForCurrentContext(), callback: Result<T> -> ()) -> Future<T> {
let p = Promise<T>()

self.onComplete(context: c) { result in
Expand All @@ -416,21 +392,13 @@ public extension Future {
return p.future
}

public func recover(task: (NSError) -> T) -> Future<T> {
return self.recover(context: executionContextForCurrentContext(), task: task)
}

public func recover(context c: ExecutionContext, task: (NSError) -> T) -> Future<T> {
public func recover(context c: ExecutionContext = executionContextForCurrentContext(), task: (NSError) -> T) -> Future<T> {
return self.recoverWith(context: c) { error -> Future<T> in
return Future.succeeded(task(error))
}
}

public func recoverWith(task: (NSError) -> Future<T>) -> Future<T> {
return self.recoverWith(context: executionContextForCurrentContext(), task: task)
}

public func recoverWith(context c: ExecutionContext, task: (NSError) -> Future<T>) -> Future<T> {
public func recoverWith(context c: ExecutionContext = executionContextForCurrentContext(), task: (NSError) -> Future<T>) -> Future<T> {
let p = Promise<T>()

self.onComplete(context: c) { result -> () in
Expand Down

0 comments on commit e38a69c

Please sign in to comment.