Skip to content

Instantly share code, notes, and snippets.

@kylehowells
Created August 24, 2021 23:02
Show Gist options
  • Select an option

  • Save kylehowells/2ff3bf05a52ceafbe615efaf9c1bba3b to your computer and use it in GitHub Desktop.

Select an option

Save kylehowells/2ff3bf05a52ceafbe615efaf9c1bba3b to your computer and use it in GitHub Desktop.
import Foundation
protocol ExampleObserver:AnyObject {
func methodThatDoesSomething()
}
class Example: NSObject {
// MARK: - Observers
/// Private helper class to maintain a weak reference to the observers
fileprivate class WeakObserver {
private(set) weak var value: ExampleObserver?
init(value: ExampleObserver?) {
self.value = value
}
}
private var observers : [WeakObserver] = []
func addObserver(_ observer: ExampleObserver) {
self.observers = self.observers.filter({ $0.value != nil }) // Trim
self.observers.append( WeakObserver(value: observer) ) // Append
}
func removeObserver(_ observer: ExampleObserver) {
self.observers = self.observers.filter({
guard let value = $0.value else {
return false
}
return !(value === observer)
})
}
// MARK: - Usage
func somethingHappened() {
// .. do something ...
// Update observers
self.observers.forEach({ $0.value?.methodThatDoesSomething() })
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment