如何在 Swift 中按下按钮后延迟执行某些操作,但每次按下按钮时都会推迟延迟?

问题描述 投票:0回答:1

我正在开发一个 Swift 应用程序,该应用程序正在监听按钮按下,并且在最后一次按下按钮后 n 秒我想显示警报。但是,如果用户在 n 秒结束之前向按钮发送垃圾邮件,我想在每次按下按钮时将延迟重置回 n 秒,而不仅仅是显示多个警报。

在 Swift 中,显然有一些方法可以在延迟后执行某些操作(使用

DispatchQueue
Timer
等),但我正在努力弄清楚如果在按钮之前再次按下按钮,如何“延长”延迟延迟n秒完成。

有人处理过这个问题或对如何解决此类问题有任何建议吗?

swift macos timer dispatch-queue
1个回答
0
投票

如果您使用计时器进行延迟,则每次都可以使其无效,从而有效地重置它。 (我认为你必须为此使用 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()
                }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.