I have a Process object (is kind of Model). Inside a process, I have an array of tuples
var listeners: [(WeakContainer<AnyObject>, (S) -> ())]
WeakContainer
handles a weak ref inside. I need to remove an element from the listeners
array when Conainer's value becomes nil. My code looks like this:
class Process<S> {
typealias Handler = (S) -> ()
typealias Listener = (container: Weak<AnyObject>, handler: StateHandler)
var listeners: [Listener] = []
private let runLoop = RunLoop()
init() {
runLoop.run(mode: .default, before: .now)
runLoop.perform { [weak self] in
self?.state.listeners.removeAll {
$0.container.value == nil
}
}
}
}
Is it correct usage of RunLoop for my targets or not? Why? I will be grateful if you propose a more suitable alternative for my case (tracking for the object becomes nil).