Swift   发布时间:2022-04-29  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了什么是Swift的“cleartimeout”等价物?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在文本输入字段上设置超时,该字段仅在用户停止输入后的第二秒内实现内部代码.因此,当用户键入时,我会不断调用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函数不能像我希望的那样工作.

也许这里的派遣功能不合适?

解决方法

dispatch_after是performSELEct的一个很好的替代选择:afterDelay:但我不认为这些都是你想要的(因为一旦你设置它们,就没有办法阻止它们).

如果你想在它闲置一秒后调用一段代码,那么我认为你想要使用一个计时器(例如NSTimer很好,或者你可以使用调度计时器).最重要的是,每次进行键盘交互时,查看是否有待处理的计时器,如果是,则使其无效,然后安排新的计时器.

所以我可能倾向于在S​​wift 3中执行类似下面的操作.例如,在iOS 10及更高版本中,您可以使用块再现:

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
    }
}

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

weak var timer: Timer?

func resetTimer() {
    timer?.invalidate()
    timer = .scheduledTimer(timeInterval: 1.0,target: self,SELEctor: #SELEctor(handlEIDleEvent(_:)),userInfo: nil,repeats: falsE)
}

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

或者,在Swift 2中:

weak var timer: NSTimer?

func resetTimer() {
    timer?.invalidate()
    let nextTimer = NSTimer.scheduledTimerWithTimeInterval(1.0,SELEctor: "handlEIDleEvent:",repeats: falsE)
    timer = nextTimer
}

func handlEIDleEvent(timer: NSTimer) {
    // do whatever you want when idle after certain period of time
}

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

大佬总结

以上是大佬教程为你收集整理的什么是Swift的“cleartimeout”等价物?全部内容,希望文章能够帮你解决什么是Swift的“cleartimeout”等价物?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。