Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift println()输出重复的字符_Swift_Println - Fatal编程技术网

Swift println()输出重复的字符

Swift println()输出重复的字符,swift,println,Swift,Println,我正在使用AVAudioPlayer播放声音。在我检查加速度计的运动后,会播放该声音。一切正常。我注意到println()的输出周期性地显示重复字符。以下是要输出到控制台的代码: motionManager.accelerometerUpdateInterval = (1/40) motionManager.startAccelerometerUpdatesToQueue(queue) { accelerometerData, error in var x = accelerometerDat

我正在使用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
下面是控制台中的一个示例:

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()是。我贴出了答案。