Skip to content

Instantly share code, notes, and snippets.

@nil-biribiri
Created January 23, 2019 10:18
Show Gist options
  • Save nil-biribiri/7b82e2f7146c51eefa68c0d6e8226e17 to your computer and use it in GitHub Desktop.
Save nil-biribiri/7b82e2f7146c51eefa68c0d6e8226e17 to your computer and use it in GitHub Desktop.
Observable for Swift 4.0
import Foundation
class Observable<T> {
typealias Listener = (T) -> ()
private var listener: Listener?
private var queue: DispatchQueue = DispatchQueue.main
var value: T {
didSet {
fire()
}
}
init(_ value: T) {
self.value = value
}
func bind(withQueue queue: DispatchQueue = DispatchQueue.main, _ listener: Listener?) {
self.listener = listener
self.queue = queue
}
func bindAndFire(withQueue queue: DispatchQueue = DispatchQueue.main, _ listener: Listener?) {
self.listener = listener
self.queue = queue
fire()
}
func removeObserver() {
listener = nil
}
private func fire() {
self.queue.async {
self.listener?(self.value)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment