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

  1. //
  2. // PromiseBlocks.swift
  3. // then
  4. //
  5. // Created by Sacha Durand Saint Omer on 26/10/16.
  6. // Copyright © 2016 s4cha. All rights reserved.
  7. //
  8. import Foundation
  9. struct PromiseBlocks<T> {
  10. typealias SuccessBlock = (T) -> Void
  11. typealias FailBlock = (Error) -> Void
  12. typealias ProgressBlock = (Float) -> Void
  13. typealias FinallyBlock = () -> Void
  14. var success = [SuccessBlock]()
  15. var fail = [FailBlock]()
  16. var progress = [ProgressBlock]()
  17. var finally = [FinallyBlock]()
  18. }
  19. extension PromiseBlocks {
  20. func updateProgress(_ progress: Float) -> () -> Void {
  21. let progressBlocks = self.progress
  22. return {
  23. progressBlocks.forEach { $0(progress) }
  24. }
  25. }
  26. func fulfill(value: T) -> () -> Void {
  27. let successBlocks = self.success
  28. let finallyBlocks = self.finally
  29. return {
  30. successBlocks.forEach { $0(value) }
  31. finallyBlocks.forEach { $0() }
  32. }
  33. }
  34. func reject(error: Error) -> () -> Void {
  35. let failureBlocks = self.fail
  36. let finallyBlocks = self.finally
  37. return {
  38. failureBlocks.forEach { $0(error) }
  39. finallyBlocks.forEach { $0() }
  40. }
  41. }
  42. }