sách gpt4 ăn đã đi

swift - Swift 的 "cleartimeout"是什么?

In lại 作者:搜寻专家 更新时间:2023-10-31 22:03:42 24 4
mua khóa gpt4 giày nike

我正在尝试在文本输入字段上设置超时,该字段仅在用户停止输入后一秒钟内执行内部代码。因此,当用户输入时,我会不断调用 cleartimeout 并重新启动 setTimeout。

我最初查看的是 Objective C 中的 performSelector 函数,但似乎没有 Swift 中的等效函数。

然后我转向 Swift 中的 GCD 函数,寻找执行它的方法。

这是我想出的:

var delta: Int64 = 1 * Int64(NSEC_PER_SEC)
var time = dispatch_time(DISPATCH_TIME_NOW, delta)
dispatch_suspend(dispatch_get_main_queue())
dispatch_after(time, dispatch_get_main_queue(), {
println("timeout")
});

dispatch_suspend 函数没有像我希望的那样工作。

也许调度函数在这里不合适?

câu trả lời hay nhất

Bạn có thể sử dụng dispatch_after thay vì performSelector 之一。但我认为这两者都不是您想要的。

如果您只想在代码块空闲一秒钟后才调用它,那么我认为您需要使用计时器(例如 Timer 就可以,或者您可以使用 dispatch定时器)。底线是,每次您获得键盘交互时,查看是否有待处理的计时器,如果有,则使其无效,然后安排新的计时器。

所以我可能倾向于在 Swift 3 中做类似下面的事情。例如,在 iOS 10 及更高版本中,您可以使用 block 再现:

weak var timer: Timer?

func resetTimer() {
timer?.invalidate()
timer = .scheduledTimer(withTimeInterval: 1.0, repeats: false) { [weak self] timer in
// do whatever you want when idle after certain period of time
}
}

或者,如果您需要支持没有基于 block 的计时器的早期 iOS 版本:

weak var timer: Timer?

func resetTimer() {
timer?.invalidate()
timer = .scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleIdleEvent(_:)), userInfo: nil, repeats: false)
}

@objc func handleIdleEvent(_ timer: Timer) {
// do whatever you want when idle after certain period of time
}

但是,如果您使用后一种方法,请认识到此 Timer 保持对其 mục tiêu 的强引用,因此您可能希望在 中取消计时器viewDidDisappear(但不是 deinit)。这就是为什么我们更喜欢基于 block 的再现或 GCD 计时器。


顺便说一句,我不确定您的dispatch_suspend 的意图是什么,但不要挂起主队列。您永远不想做任何可能干扰主队列及时处理事件的事情(即永远不要阻塞/暂停主队列)。

关于swift - Swift 的 "cleartimeout"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807984/

24 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress