Skip to content

Instantly share code, notes, and snippets.

@mdflores
Last active April 2, 2018 12:08

Revisions

  1. mdflores renamed this gist Apr 2, 2018. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. mdflores revised this gist Apr 2, 2018. No changes.
  3. mdflores revised this gist Apr 2, 2018. No changes.
  4. mdflores revised this gist Apr 2, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions Example.swift
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,9 @@
    let task = RevokableTask(delayInSeconds: 120) {
    print("This task must not be executed..."
    print("This task must not be executed...")
    }

    let task2 = RevokableTask(delayInSeconds: 120) {
    print("Task is executing..."
    print("Task is executing...")
    }

    task.execute()
  5. mdflores created this gist Apr 2, 2018.
    11 changes: 11 additions & 0 deletions Example.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    let task = RevokableTask(delayInSeconds: 120) {
    print("This task must not be executed..."
    }

    let task2 = RevokableTask(delayInSeconds: 120) {
    print("Task is executing..."
    }

    task.execute()
    task2.execute()
    task.revoke()
    26 changes: 26 additions & 0 deletions RevokableTask.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    typealias TaskHandler = () -> ()

    class RevokableTask {
    private(set) var isCancelled: Bool = false
    private(set) var task: TaskHandler
    private(set) var delayTime: DispatchTime
    private(set) var identifier: String

    init(delayInSeconds: Double, task: @escaping TaskHandler) {
    self.task = task
    self.delayTime = .now() + delayInSeconds
    self.identifier = UUID().uuidString
    }

    func execute() {
    DispatchQueue.main.asyncAfter(deadline: self.delayTime) {
    if !self.isCancelled {
    self.task()
    }
    }
    }

    func revoke() {
    self.isCancelled = true
    }
    }