import Combine public extension Bus { final class Debounce { let v = PassthroughSubject() var subscriptions = [AnyCancellable]() public init( _ handler: @escaping ((Src) -> Dst?), _ sec: Double, _ src: String, _ dst: String ) { // Вход. Bus.receiveSync( [src], { [weak self] _, v in self?.v.send(v) }, &subscriptions ) // Выход. Bus.sendSync( dst, v .debounce(for: .seconds(sec), scheduler: DispatchQueue.main) .compactMap { (v: Src) in handler(v) } .eraseToAnyPublisher(), &subscriptions ) } } }