Проверка шаблона шины для iOS
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

Bus.Async.swift 675B

vor 10 Monaten
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. }