debounce는 입력 소스로부터 값이 발행될 때, 지정된 시간동안 기다린 후 마지막으로 발행된 값을 다음 단계로 전달하는 Operator에요.

기능

사용

여기에서는 사용자 입력이 빠르게 들어올 때 debounce를 설정하는 시뮬레이션을 진행해볼게요.

let subject = PassthroughSubject<String, Never>()
subject
  .debounce(for: 1, scheduler: DispatchQueue.main)
  .sink { value in
    print(value)
  }
  .store(in: &cancellables)

subject.send("H")
subject.send("He")
subject.send("Hel")
subject.send("Hell")
subject.send("Hello")

// 결과
(1초 기다린 후) Hello

✋ 프로퍼티 for에는 SchedulerTimeType.Stride 타입의 값이 들어가요.

public init(_ timeInterval: DispatchTimeInterval)

public init(floatLiteral value: Double)

public init(integerLiteral value: Int)

public static func seconds(_ s: Double) -> DispatchQueue.SchedulerTimeType.Stride

public static func seconds(_ s: Int) -> DispatchQueue.SchedulerTimeType.Stride

public static func milliseconds(_ ms: Int) -> DispatchQueue.SchedulerTimeType.Stride

public static func microseconds(_ us: Int) -> DispatchQueue.SchedulerTimeType.Stride

public static func nanoseconds(_ ns: Int) -> DispatchQueue.SchedulerTimeType.Stride