I finally realized that I simply needed to keep a strong reference to sub. The finished code now looks something like:
private var searchTextObserver: AnyCancellable!
private var item: ModelItem!
private func setupTextObserver() {
let sub = NotificationCenter.default
.publisher(for: NSControl.textDidChangeNotification, object: searchTermText)
.map( { ($0.object as! NSTextField).stringValue } )
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
.sink(receiveValue: { [weak self] in
self?.item.value = $0
})
searchTextObserver = sub
}
Topic:
UI Frameworks
SubTopic:
AppKit
Tags: