import Combine public extension Bus { final class Async { let v = PassthroughSubject() var subscriptions = [AnyCancellable]() public init( _ handler: @escaping ((Src) -> Dst?), _ src: String, _ dst: String ) { // Вход. Bus.receiveSync( [src], { [weak self] _, v in self?.v.send(v) }, &subscriptions ) // Выход. Bus.sendSync( dst, v .compactMap { (v: Src) in handler(v) } // Асинхронно. .receive(on: DispatchQueue.main) .eraseToAnyPublisher(), &subscriptions ) } } }