Проверка шаблона шины для 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.Debounce.swift 692B

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