Created
August 24, 2021 23:02
-
-
Save kylehowells/2ff3bf05a52ceafbe615efaf9c1bba3b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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