可选类型'NSOperationQueue?'的值没有打开

时间:2015-11-21 23:39:47

标签: ios swift swift2 core-motion

我正在开发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,这些错误令我感到困惑。

我该如何解决这个问题?

1 个答案:

答案 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
        }
})