Skip to content

Instantly share code, notes, and snippets.

@atomkirk
Created June 30, 2015 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save atomkirk/7d9c902782f6d1a7e04a to your computer and use it in GitHub Desktop.
Save atomkirk/7d9c902782f6d1a7e04a to your computer and use it in GitHub Desktop.
Simple Promise implementation
import Foundation
public class Promise<T> {
public typealias PromiseSuccessBlock = (result: T) -> Void
public typealias PromiseFailureBlock = (error: NSError?) -> Void
public typealias PromiseAlwaysBlock = () -> Void
private(set) var successBlocks = [PromiseSuccessBlock]()
private(set) var failureBlocks = [PromiseFailureBlock]()
private(set) var alwaysBlocks = [PromiseAlwaysBlock]()
public func success(block: PromiseSuccessBlock) -> Self {
successBlocks.append(block)
return self
}
public func failure(block: PromiseFailureBlock) -> Self {
failureBlocks.append(block)
return self
}
public func always(block: PromiseAlwaysBlock) -> Self {
alwaysBlocks.append(block)
return self
}
public func resolve(result: T) {
successBlocks.map { $0(result: result) }
alwaysBlocks.map { $0() }
}
public func reject(error: NSError?) {
failureBlocks.map { $0(error: error) }
alwaysBlocks.map { $0() }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment