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
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() }
|
|
}
|
|
}
|
|
}
|