Swift println()输出重复的字符
我正在使用AVAudioPlayer播放声音。在我检查加速度计的运动后,会播放该声音。一切正常。我注意到println()的输出周期性地显示重复字符。以下是要输出到控制台的代码:Swift println()输出重复的字符,swift,println,Swift,Println,我正在使用AVAudioPlayer播放声音。在我检查加速度计的运动后,会播放该声音。一切正常。我注意到println()的输出周期性地显示重复字符。以下是要输出到控制台的代码: motionManager.accelerometerUpdateInterval = (1/40) motionManager.startAccelerometerUpdatesToQueue(queue) { accelerometerData, error in var x = accelerometerDat
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
下面是控制台中的一个示例:
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
发送回主队列:
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()
}
}
不过我会小心的,医生说:
由于处理的事件可能以较高的速率到达,因此不建议使用主操作队列
你不应该把那
println
放在那里,除非你只需要调试那些数据。您可能还想考虑只打印第10次或第100次更新之类的内容。传递给“startAccelerometerUpdatesToQueue”的“队列”是偶然的后台队列吗?应该是后台队列,对吗?让queue=NSOperationQueue()是。我贴出了答案。