You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

50 lines
1.2 KiB

//
// PromiseBlocks.swift
// then
//
// Created by Sacha Durand Saint Omer on 26/10/16.
// Copyright © 2016 s4cha. All rights reserved.
//
import Foundation
struct PromiseBlocks<T> {
typealias SuccessBlock = (T) -> Void
typealias FailBlock = (Error) -> Void
typealias ProgressBlock = (Float) -> Void
typealias FinallyBlock = () -> Void
var success = [SuccessBlock]()
var fail = [FailBlock]()
var progress = [ProgressBlock]()
var finally = [FinallyBlock]()
}
extension PromiseBlocks {
func updateProgress(_ progress: Float) -> () -> Void {
let progressBlocks = self.progress
return {
progressBlocks.forEach { $0(progress) }
}
}
func fulfill(value: T) -> () -> Void {
let successBlocks = self.success
let finallyBlocks = self.finally
return {
successBlocks.forEach { $0(value) }
finallyBlocks.forEach { $0() }
}
}
func reject(error: Error) -> () -> Void {
let failureBlocks = self.fail
let finallyBlocks = self.finally
return {
failureBlocks.forEach { $0(error) }
finallyBlocks.forEach { $0() }
}
}
}