Swift println()输出重复的字符

时间:2014-10-18 02:52:57

标签: swift println

我正在使用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()的调用会给出重复的字符?

1 个答案:

答案 0 :(得分:2)

正在发生的事情是加速计正在以足够快的速度向队列发布更新,以便队列同时运行某些更新并且您的打印语句重叠。解决这个问题的最简单方法是简单地将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次更新等。