Advertisement
Guest User

Untitled

a guest
Jul 12th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.08 KB | None | 0 0
  1. class AsyncOperation: Operation {
  2.    
  3.     internal enum State {
  4.         case pending, executing, finished
  5.     }
  6.    
  7.     private var managedKeyPaths: [KeyPath<AsyncOperation, Bool>] {
  8.         return [\AsyncOperation.isExecuting, \AsyncOperation.isFinished]
  9.     }
  10.  
  11.     internal var state = State.pending {
  12.         willSet { managedKeyPaths.forEach { willChangeValue(for: $0) } }
  13.         didSet { managedKeyPaths.forEach { didChangeValue(for: $0) } }
  14.     }
  15.    
  16.     override var isAsynchronous: Bool {
  17.         return true
  18.     }
  19.    
  20.     override var isExecuting: Bool {
  21.         return state == .executing
  22.     }
  23.    
  24.     override var isFinished: Bool {
  25.         return state == .finished
  26.     }
  27. }
  28.  
  29. extension Operation {
  30.     func cancelRecursively() {
  31.         cancel()
  32.         dependencies.forEach { $0.cancelRecursively() }
  33.     }
  34. }
  35.  
  36. extension Array where Element: Operation {
  37.     func cancel() {
  38.         self.forEach { $0.cancel() }
  39.     }
  40. }
  41.  
  42. extension ArraySlice where Element: Operation {
  43.     func cancel() {
  44.         self.forEach { $0.cancel() }
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement