gpt4 book ai didi

swift - 如何快速检测(比如)2 秒的不活动?

转载 作者:行者123 更新时间:2023-11-28 11:29:51 25 4
gpt4 key购买 nike

这个问题可以改写为:如果 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 实例)做到这一点?

最佳答案

一种方法是:

  1. 记录事件发生的当前时间
  2. 设置一个您满意的周期性计时器(例如 0.25 秒)。
  3. 当计时器弹出时,检查当前时间和上次事件时间之间的差异。如果大于 2 秒,则触发您的通知。

如果我必须识别出某人已停止输入 2 秒,我就会这样做。以打字速度使计时器失效和创建计时器会造成很大的困惑。您可以根据您的要求调整它,具体取决于您需要接近 2 秒的时间。

您也可以通过使用 timeSinceLastEvent 变量来实现这一点,并在事件发生时将其设置为 0。循环计时器会按粒度递增,并检查它是否已达到 2 秒,如果已达到则触发通知。这比计算时间更粗略,因为不能保证计时器间隔,但更简单。

关于swift - 如何快速检测(比如)2 秒的不活动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57153713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com