作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题可以改写为:如果 2 秒过去没有事件(重新)发生,如何调用函数?
我正在玩 SFSpeechRecogniser
。当用户说话时,它会发送连续更新(可能每秒 2-3 次)。我正在尝试检测用户何时停止说话。如果我在(比方说)2 秒内没有收到任何更新,我可以假设用户已暂停讲话。
如何在 Swift 中实现它?
我知道我可以:
var timer : Timer?
func f() {
on_event = { result, error in
print( "Got event, restarting timer" )
self.timer?.invalidate()
self.timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { _ in
print( "2s inactivity detected" )
self.timer?.invalidate()
NotificationCenter.default.post( name: inactivity_notification, object: nil )
}
}
}
但是,是否可以在不重复创建和销毁 Timer 实例的情况下(从而创建大量永远不会被使用的临时 Timer 实例)做到这一点?
最佳答案
一种方法是:
0.25
秒)。2
秒,则触发您的通知。如果我必须识别出某人已停止输入 2
秒,我就会这样做。以打字速度使计时器失效和创建计时器会造成很大的困惑。您可以根据您的要求调整它,具体取决于您需要接近 2
秒的时间。
您也可以通过使用 timeSinceLastEvent
变量来实现这一点,并在事件发生时将其设置为 0
。循环计时器会按粒度递增,并检查它是否已达到 2
秒,如果已达到则触发通知。这比计算时间更粗略,因为不能保证计时器间隔,但更简单。
关于swift - 如何快速检测(比如)2 秒的不活动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57153713/
我是一名优秀的程序员,十分优秀!