Timer 如何在swiftUI中自动更新TextField

Timer 如何在swiftUI中自动更新TextField,timer,swiftui,textfield,Timer,Swiftui,Textfield,我是一个新的快速开发人员,我有一个小问题。我用定时器做了一个函数来创建一个计数定时器。我想在一个文本字段中显示时间更新,但它不起作用(使用文本它起作用)。代码如下: import SwiftUI struct ContentView: View { @State var min: Int = 0 @State var sec: Int = 0 @State var time = "" @State var timer: Timer? =

我是一个新的快速开发人员,我有一个小问题。我用定时器做了一个函数来创建一个计数定时器。我想在一个文本字段中显示时间更新,但它不起作用(使用文本它起作用)。代码如下:

 import SwiftUI
  struct ContentView: View {

    @State var min: Int = 0
    @State var sec: Int = 0
    @State var time = ""
    @State var timer: Timer? = nil
    
    var body: some View {
        
        NavigationView{
        VStack{
            TextField("Tempo (min o mm:ss)", text: $time)
            
        HStack{

            Button(action: {
                self.start()
                self.time = String(self.min)+":"+String(self.sec)
                
            }){
                Text("Start")
            }
            Button(action: {
                self.stop()
                
            }){
                Text("Stop")
            }
        }
      }//VStack
     }//NavigationView
    }//body
    func start(){
            timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true){
                temp in
                self.sec = self.sec + 1
                if(self.sec == 59){
                    self.sec = 0
                    self.min = self.min + 1
                }
            }
        }
        
    func stop(){
            timer?.invalidate()
            timer = nil
        }

   }//contetView
   

您没有看到更改,因为您没有更新计时器循环中的
time
字符串

以下是修复方法:

func updateTimeString() {
    self.time = String(format: "%02d:%02d", self.min, self.sec)
}

func start(){
    timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { temp in
        self.sec = self.sec + 1
        if self.sec == 59 {
            self.sec = 0
            self.min = self.min + 1
        }
        updateTimeString()
    }
}
注意事项:

  • 我移动了代码,将
    时间
    字符串设置为一个单独的函数。然后,您也可以通过
    按钮调用此功能
  • 我使用
    String(format:)
    将格式添加到字符串中,以显示分和秒的两位数字