import Combine import SwiftUI class DebouncedBinding { private let subject = PassthroughSubject() private let cancellable: AnyCancellable private let wrappedBinding: Binding init(_ binding: Binding, handler: @escaping (T) -> Void) { self.wrappedBinding = binding self.cancellable = subject .debounce(for: .seconds(1.0), scheduler: RunLoop.main) .sink { handler($0) } } var binding: Binding { return Binding( get: { self.wrappedBinding.wrappedValue }, set: { self.wrappedBinding.wrappedValue = $0 self.subject.send($0) } ) } }