gpt4 book ai didi

Swift println() 输出重复字符

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

我正在使用 AVAudioPlayer 播放声音。在我检查加速度计的运动后播放声音。一切正常。我注意到 println() 的输出周期性地显示重复的字符。这是输出到控制台的代码:

motionManager.accelerometerUpdateInterval = (1/40)
motionManager.startAccelerometerUpdatesToQueue(queue) { accelerometerData, error in

var x = accelerometerData.acceleration.x
if x > 0.75 {
println("X is greater than 0.5: \(accelerometerData.acceleration.x)")
if !self.audioPlayer.playing {
self.toggleAVPlayer()
}
}

这是来自控制台的示例:

X is greater than 0.5: 0.767669677734375
X is greater than 0.5: 1.41529846191406
XX iiss ggrreeaatteerr tthhaann 00..55:: 20..2824260008041529240772063516
2
X is greater than 0.5: 2.65106201171875

为什么调用 println() 会给出重复的字符?

最佳答案

发生的事情是加速度计以足够快的速度向您的队列发布更新,以便队列可以同时运行一些更新并且您的打印语句重叠。解决这个问题的最简单方法是简单地将 println 分派(dispatch)回主队列:

motionManager.accelerometerUpdateInterval = (1/40)
motionManager.startAccelerometerUpdatesToQueue(queue) { accelerometerData, error in

var x = accelerometerData.acceleration.x
if x > 0.75 {
dispatch_async(dispatch_get_main_queue()) {
println("X is greater than 0.5: \(accelerometerData.acceleration.x)")
}
if !self.audioPlayer.playing {
self.toggleAVPlayer()
}
}

不过我会小心,文档说:

Because the processed events might arrive at a high rate, using the main operation queue is not recommended.

你不应该把那个 println 放在那里,除非你只需要调试那个数据。您可能还想考虑仅在每第 10 次或第 100 次更新时打印一次。

关于Swift println() 输出重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435847/

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