Skip to content

Instantly share code, notes, and snippets.

@mrdekk
Last active November 21, 2023 13:47
Show Gist options
  • Save mrdekk/5f9af5cb2d1c8df3a72349a556ece18b to your computer and use it in GitHub Desktop.
Save mrdekk/5f9af5cb2d1c8df3a72349a556ece18b to your computer and use it in GitHub Desktop.
Simple Swift AsyncOperation
class AsyncOperation : Operation {
private var _isExecuting = false
private var _isFinished = false
override func start() {
guard !isCancelled else {
finish()
return
}
willChangeValue(forKey: "isExecuting")
_isExecuting = true
main()
didChangeValue(forKey: "isExecuting")
}
override func main() {
// NOTE: should be overriden
finish()
}
func finish() {
willChangeValue(forKey: "isFinished")
_isFinished = true
didChangeValue(forKey: "isFinished")
}
override var isAsynchronous: Bool {
return true
}
override var isExecuting: Bool {
return _isExecuting
}
override var isFinished: Bool {
return _isFinished
}
}
class MyAsyncOperation: AsyncOperation {
override func main() {
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in
guard let self = self else { return }
// do the work
print("Hello3")
self.finish()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment