Я хочу запустить таймер на 60 секунд, чтобы проверить, сколько слов пользователь может набрать за эту минуту. Я начал считать символы в TextField. Но теперь мне нужно уменьшить таймер, чтобы я мог сделать математику и распечатать ответ для пользователя. Кажется, я не могу понять, как использовать таймер, когда он не в структуре Content View. Могу я это сделать?
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()
}
}
}