[Swift] Duration と TimeInterval の変換

     

TAGS:

Duration と TimeInterval の相互変換を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Ventura 13.1 Beta 2
  • Xcode 14.1
  • iOS 16.0

TimeInterval

TimeInterval は、非常に古くから使われている型で、時間の長さを表現するのに使われています。

TimeInterval での 1 は、1秒を表しています。実際には、以下のように Double に typealias されています。

typealias TimeInterval = Double

例えば、Date の時間を進める advanced という API の引数にも使用されています。
以下の oneHourLater は、現在時刻から 1時間進んだ時間を指します。

// def: func advanced(by n: TimeInterval) -> Date
let oneHourLater = Date().advanced(60 * 60)

詳細な時間計算の時には、Double であることに気をつけないといけません。
例えば、単純に == として同値であるか確認してしまうと、Double として同値であることが必要となります。

Duration

Duration は、iOS16/macOS13 で導入された型です。

経過時間を表すのに使用されます。

例えば、Duration.seconds(5) は、5秒を表しますし、Duration.milliseconds(25) は、25ミリ秒を表します。

Duration/TimeInterval 変換

どちらも時間の長さを表すために、API で使用されることがあります。

API によっては、Duration しか受け取らないAPI、TimeInterval しか受け取らないAPIと 色々あります。

使用する API によって、都度変換等を行なっていくことが必要となります。

TimeInterval -> Duration

TimeInterval は、秒を Double で表していますので、
以下のように変換できます。

let timeInterval: TimeInterval = 5.0
let duration = Duration.seconds(timeInterval)

Duration -> TimeInterval

Duration から TimeInterval への変換は、少し手間がかかります。

Duration は、秒と アット秒 で構成されています。
それぞれ、Int64 が使われています。

アット秒については、こちら

ですので、以下のように、再計算することで、TimeInterval に変換することができます。

   let duration = Duration.seconds(...)  
   let (seconds, attoSeconds) = duration.cinoibebts
   let timeInterval = Double(seconds) + Double(attoSeconds) * 1.0e-18

まとめ

Duration と TimeInterval の変換について説明しました。

Duration と TimeInterval の変換
  • TimeInterval は 秒を Double で表現している
  • Duration は、秒とアット秒を それぞれ Int64 で表現している
  • Duration.seconds(TimeInteval) とすると TimeInterval から Duration に変換できる
  • 秒+アット秒 x 1.0e-18 で Duration から TimeInterval に変換できる

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

SwiftUI ViewMatery

SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。

英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

SwiftUI 徹底入門

# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。

Swift学習におすすめの本

詳解Swift

Swift の学習には、詳解 Swift という書籍が、おすすめです。

著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。

最新版を購入するのがおすすめです。

現時点では、上記の Swift 5 に対応した第5版が最新版です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です