Представьте, что у меня есть API для класса, который использует PassthroughSubject
для получения входных данных:
class Logger {
let log: PassthroughSubject<String, Never>
}
Обычно я могу выдать значение, вызвав logger.log.send("test")
.
Теперь скажем, я хочу иметь свой собственный регистратор, который находится между этим общим c регистратором и моим кодом:
class MyLogger {
let log: PassthroughSubject<String, Never>
}
Это должно быть префиксом строки, а затем отправлять любые обновления в Регистратор. Есть ли способ связать вывод одного объекта PassthroughSubject (например, MyLogger) с другим (например, Logger)?
Я знаю, что могу сделать это следующим образом:
let cancellable = myLogger.log.sink {
logger.log.send("[MyApp] " + $0)
}
Однако это не Это не похоже на способ объединения вещей в цепочку. Я надеялся, что есть API, более похожий на этот:
logger.log.subscribe(myLogger.log.map { "[MyApp] " + $0 })
Однако он не компилируется, поскольку я думаю, что карта заставляет его превращаться в издателя, а не в тему:
Метод экземпляра 'subscribe' требует, чтобы 'Publishers.Map , String> 'соответствует' Subject '
Есть ли более декларативный API для подписки одного PassthroughSubject на обновления от другого (с поддержкой промежуточных мутаций), помимо использования sink
?