Проверка шаблона шины для iOS
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Bus.Async.swift 675B

il y a 10 mois
12345678910111213141516171819202122232425262728293031
  1. import Combine
  2. public extension Bus {
  3. final class Async<Src, Dst> {
  4. let v = PassthroughSubject<Src, Never>()
  5. var subscriptions = [AnyCancellable]()
  6. public init(
  7. _ handler: @escaping ((Src) -> Dst?),
  8. _ src: String,
  9. _ dst: String
  10. ) {
  11. // Вход.
  12. Bus.receiveSync(
  13. [src],
  14. { [weak self] _, v in self?.v.send(v) },
  15. &subscriptions
  16. )
  17. // Выход.
  18. Bus.sendSync(
  19. dst,
  20. v
  21. .compactMap { (v: Src) in handler(v) }
  22. // Асинхронно.
  23. .receive(on: DispatchQueue.main)
  24. .eraseToAnyPublisher(),
  25. &subscriptions
  26. )
  27. }
  28. }
  29. }