所以我构建了一个应用程序,应该每分钟获取单词数。如何使用SwithUI启动不在ContentView中的计时器



我想启动一个 60 秒的计时器来测试用户在该分钟内可以键入多少个单词。我开始计算文本字段中的字符数。但是现在我需要减少一个计时器,以便我可以进行数学运算并将答案打印出来给用户。不过,当计时器不在内容视图结构中时,我似乎无法弄清楚如何使用计时器。我能做到吗?

import SwiftUI
struct ContentView: View {
@State var userInput = ""
@State var modalview = false
@State var getstarted = false
@EnvironmentObject var timerHolder : TimerHolder
var body: some View {
ZStack() {
modalView(modalview: $modalview, userInput: userInput)
}.sheet(isPresented: $modalview) {
modalView(modalview: self.$modalview)
}
}
}


struct modalView : View {
@ObservedObject var durationTimer = TimerHolder()
@Binding var modalview : Bool
@State var userInput: String = ""

var body: some View {
VStack{
Button(action: {
self.modalview = true
}) {
TextField("Get Started", text:$userInput)
.background(Color.gray)
.foregroundColor(.white)
.frame(width: 300, height: 250)
.cornerRadius(20)
Text("(userInput.count)")

Text("(durationTimer.count) Seconds")
}
}
}
}
class TimerHolder : ObservableObject {
var timer : Timer!
@Published var count = 0
func start() {
self.timer?.invalidate()
self.count = 0
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) {
_ in
self.count += 1
print(self.count)
}
}



struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView() 
}
}
}

简单的一个,因为你把它当作财产,是从.onAppear开始......(当然,假设你在ContentView创作时ContentView().environmentObject(TimerHolder())传递它(

struct ContentView: View {
@State var userInput = ""
@State var modalview = false
@State var getstarted = false
@EnvironmentObject var timerHolder : TimerHolder
var body: some View {
ZStack() {
modalView(modalview: $modalview, userInput: userInput)
}.sheet(isPresented: $modalview) {
modalView(modalview: self.$modalview)
}
.onAppear {
self.timerHolder.start()
}
}
}

相关内容

最新更新