branch10480’s blog

Topics that I've learned.

Swift Async Algorithms

今回は 「Swift Async Algorithms」 というWWDC22のビデオを視聴したので、気になった部分についてメモしていきます。

developer.apple.com

Clock API

代表的な2種類のClockがある。

  1. ContinuousClock
  2. SuspendingClock

違いはデバイスをスリープにしたときにタイマーが止まるか継続するか。

  1. 継続
  2. 停止する

現実時間を意識した時間経過を使いたい場合は ContinuousClockを、そうでない場合は SuspendingClock を使うと良い。

SuspendingClock の使用例としては何らかの遅延アニメーションを実行するときが挙げられる。

let clock = SuspendingClock()
let elapsed = await clock.measure {
  await someLongRunningWork()
}
//Elapsed time reads 00:05.40

let clock = ContinuousClock()
let elapsed = await clock.measure {
  await someLongRunningWork()
}
//Elapsed time reads 00:19.54

Debounce

イベントが流れてきても一定時間別のイベントが来るまで待って処理を行うのに使用する。(短い時間でイベント全てに対して処理をしないため)

let queries = searchValues
   .debounce(for: .milliseconds(300))

for await query in queries {
  let results = try await performSearch(query)
  await channel.send(results)
}