我正在开发here
的Core Motion Swift教程然而,我收到错误:
可选类型'NSOperationQueue?'的值没有打开;你的意思是 使用'!'还是'?'?
当我插入'!'时建议,我得到另一个错误:
无法转换类型'的值(CMAccelerometerData!,NSError!) - >虚空” 预期参数类型'CMAccelerometerHandler'(又名'可选 ,可选) - > ()')
这是代码:
motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue(),
withHandler: { (accelerometerData: CMAccelerometerData!, error: NSError!) -> Void in self.outputAccelerationData(accelerometerData.acceleration)
if (error != nil) {
print("\(error)")
}
})
motionManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:
{ (gyroData: CMGyroData!, error: NSError!) -> Void in
self.outputRotationData(gyroData.rotationRate)
if (error != nil) {
print("\(error)")
}
})
我正在尝试学习Core Motion,这些错误令我感到困惑。
我该如何解决这个问题?
答案 0 :(得分:2)
这与Core Motion无关,它是糟糕的Swift代码。我建议您了解Swift可选项。这是一个很好的来源:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html
现在,关于你的代码: gyroData 是可选的,所以不要把!放在你的闭包中的参数前面,请使用:
if let gData = gyroData {
...
}
这样的事情:
motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue(),
withHandler: { (accelerometerData, error) -> Void in self.outputAccelerationData(accelerometerData.acceleration)
if let x = accelerometerData {
// now x is your unwrapped accelerometerData
}
})