我正在开发一个 Swift 应用程序,该应用程序正在监听按钮按下,并且在最后一次按下按钮后 n 秒我想显示警报。但是,如果用户在 n 秒结束之前向按钮发送垃圾邮件,我想在每次按下按钮时将延迟重置回 n 秒,而不仅仅是显示多个警报。
在 Swift 中,显然有一些方法可以在延迟后执行某些操作(使用
DispatchQueue
或 Timer
等),但我正在努力弄清楚如果在按钮之前再次按下按钮,如何“延长”延迟延迟n秒完成。
有人处理过这个问题或对如何解决此类问题有任何建议吗?
如果您使用计时器进行延迟,则每次都可以使其无效,从而有效地重置它。 (我认为你必须为此使用 ViewModel,因为你不能将计时器变量附加到视图。)像这样:
class ViewModel: ObservableObject {
@Published var displayText = false
var timer: Timer? = nil
func setupTimer() {
// "reset" the timer
timer?.invalidate()
// delays for 3 seconds
timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: false) { timer in
self.displayText = true
}
}
}
struct View1: View {
@StateObject var viewModel = ViewModel()
var body: some View {
VStack {
if viewModel.displayText {
Text("Delayed Display")
}
Text("Button to Start Delayed Display")
.onTapGesture {
viewModel.setupTimer()
}
}
}
}