今回作成するアプリ
現在時刻をリアルタイムに取得し表示するアプリを作成します。
実装
コード
全体のコードはこちら。
import SwiftUI
struct ContentView: View {
@State var nowDate = Date()
@State var dateText = ""
private let dateFormatter = DateFormatter()
init() {
dateFormatter.dateFormat = "YYYY/MM/dd(E) HH:mm:ss"
dateFormatter.locale = Locale(identifier: "ja_jp")
}
var body: some View {
VStack {
Text(dateText.isEmpty ? "\(dateFormatter.string(from: nowDate))" : dateText)
.font(.system(size: 30, weight: .bold, design: .default))
.foregroundColor(.primary)
.onAppear {
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
self.nowDate = Date()
dateText = "\(dateFormatter.string(from: nowDate))"
}
}
}
}
}
解説
日時を表示させるプロパティとDateを入れるプロパティの作成をします。
DateFormatterはインスタンス化します。
@State var nowDate = Date()
@State var dateText = ""
private let dateFormatter = DateFormatter()
イニシャライザで以下のようにdateFormatを初期設定していきます。
init() {
dateFormatter.dateFormat = "YYYY/MM/dd(E) \nHH:mm:ss"
dateFormatter.locale = Locale(identifier: "ja_jp")
}
リアルタイムの時間を表示させるには毎秒毎にDateを更新していく必要がありますので以下を追加します。
.onAppear {
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
self.nowDate = Date()
dateText = "\(dateFormatter.string(from: nowDate))
}
}
Text(dateText)
でもリアルタイムな日時を表示されますが、これでは画面を開いた1秒後にしか日時が表示されませんのでTextを以下のように書きます。
Text(dateText.isEmpty ? "\(dateFormatter.string(from: nowDate))" : dateText)
動作
環境
macOS Ventura 13.0.1
Xcode 14.2
iOS 16.2
Simulater iPhone 14 Pro Max
アイキャッチ画像 出典: App.com