我對快速編碼很陌生,我正在嘗試做一個非常簡單的專案:只是一個顯示時間的時鐘。我正在使用 TimelineView 每秒重繪 一次時間,但它不起作用。這是我的代碼:
import SwiftUI
struct ContentView: View {
@State var hour: Int = Calendar.current.component(.hour, from: Date())
@State var minute: Int = Calendar.current.component(.minute, from: Date())
@State var second: Int = Calendar.current.component(.second, from: Date())
var body: some View {
ZStack {
VStack{
Spacer()
HStack {
TimelineView(.periodic(from: .now, by: 1)) { timeline in
Text(String(hour))
Text(String(minute))
Text(String(second))
}
}
Spacer()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView()
.previewInterfaceOrientation(.portrait)
}
}
}
由于我的小時、分鐘和秒變數是 @State 并且我正在使用 TimelineView,它們應該每秒重繪 一次,不是嗎?
我很困惑,我會很感激一些幫助。非常感謝。
uj5u.com熱心網友回復:
你必須觀察時間線的變化。
在這里,我使用onChange并更新了 min、sec 和 hour 的值。
struct TimerView: View {
var date: Date
@State var hour: Int = Calendar.current.component(.hour, from: Date())
@State var minute: Int = Calendar.current.component(.minute, from: Date())
@State var second: Int = Calendar.current.component(.second, from: Date())
var body: some View {
VStack {
Text(String(hour))
Text(String(minute))
Text(String(second))
}
.onChange(of: date) { _ in
second = 1
if second > 59 {
minute = 1
second = 0
if minute > 59 {
hour = 1
minute = 0
if hour > 23 {
hour = 0
}
}
}
}
}
}
struct ContentView: View { var body: some View {
ZStack {
VStack{
Spacer()
HStack {
TimelineView(.periodic(from: .now, by: 1)) { timeline in
TimerView(date: timeline.date)
}
}
Spacer()
}
}
}
}
uj5u.com熱心網友回復:
正如檔案所說(
要改進格式,您可以使用DateFormatter(
uj5u.com熱心網友回復:
只要讓你的小時分秒computed property不@State
struct ContentView: View {
var hour: Int {
Calendar.current.component(.hour, from: Date())
}
var minute: Int {
Calendar.current.component(.minute, from: Date())
}
var second: Int {
Calendar.current.component(.second, from: Date())
}
var body: some View {
TimelineView(.periodic(from: .now, by: 1.0)) { timeline in
HStack {
Text(String(hour))
Text(String(minute))
Text(String(second))
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438928.html
