Publishers.MeasureInterval

์ œ๋„ค๋ฆญ ๊ตฌ์กฐ์ฒด | ์ƒ์œ„ Publisher๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์ด๋ฒคํŠธ๋“ค ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์ธก์ •ํ•˜๊ณ  ๋ฐฐ์ถœํ•˜๋Š” Publisher

์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • upstream : ์ƒ์œ„์— ํ๋ฅด๋Š” Publisher

  • scheduler : ์š”์†Œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ

์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ธก์ •ํ•˜์—ฌ ๋ฐœํ–‰ํ•œ๋‹ค.

measureInterval ์˜คํผ๋ ˆ์ดํ„ฐ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค.

let subject = PassthroughSubject<Void, Never>()

// Publishers.MeasureInterval Publisher
Publishers.MeasureInterval(upstream: subject, scheduler: DispatchQueue.main)
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine MeasureInterval Error")
    case .finished:
      print("Combine MeasureInterval Finish")
    }
  }, receiveValue: { value in
    print("Combine MeasureInterval : \(value.timeInterval)")
  })
  .store(in: &cancellables)

// measureInterval Operator
subject
  .measureInterval(using: DispatchQueue.main)
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine MeasureInterval Error")
    case .finished:
      print("Combine MeasureInterval Finish")
    }
  }, receiveValue: { value in
    print("Combine MeasureInterval : \(value.timeInterval)")
  })
  .store(in: &cancellables)

Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
  subject.send(Void())
}

// Combine MeasureInterval : nanoseconds(100535457)
// Combine MeasureInterval : nanoseconds(101047592)
// Combine MeasureInterval : nanoseconds(99104295)
// ...

0.1์ดˆ๋งˆ๋‹ค subject์— Void ๊ฐ’์„ ์ „๋‹ฌํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

์ด๋ฒคํŠธ ๊ฐ„์— 0.1์ดˆ ์–ธ์ €๋ฆฌ์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ๊ฐ’์œผ๋กœ ๋ฐœํ–‰๋œ๋‹ค.

RxSwift

ํ•ด๋‹น ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

ReactiveSwift

ํ•ด๋‹น ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ 

ReactiveX - Operators - TimeInterval

Last updated

Was this helpful?