可选类型 'NSOperationQueue?' 的值未展开
Value of optional type 'NSOperationQueue?' not unwrapped
我正在研究 Core Motion Swift 找到教程 here
但是,我得到一个错误:
Value of optional type 'NSOperationQueue?' not unwrapped; did you mean
to use '!' or '?'?
当我插入 '!' 时按照建议,我收到另一个错误:
Cannot convert value of type'(CMAccelerometerData!, NSError!) -> Void'
to expected argument type 'CMAccelerometerHandler' (aka 'Optional
, Optional) -> ()')
这是代码:
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,这些错误让我很困惑。
我该如何解决这个问题?
这与 Core Motion 无关,它是错误的 Swift 代码。我建议你学习一下 Swift optional。这是一个很好的来源: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
}
})
我正在研究 Core Motion Swift 找到教程 here
但是,我得到一个错误:
Value of optional type 'NSOperationQueue?' not unwrapped; did you mean to use '!' or '?'?
当我插入 '!' 时按照建议,我收到另一个错误:
Cannot convert value of type'(CMAccelerometerData!, NSError!) -> Void' to expected argument type 'CMAccelerometerHandler' (aka 'Optional , Optional) -> ()')
这是代码:
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,这些错误让我很困惑。
我该如何解决这个问题?
这与 Core Motion 无关,它是错误的 Swift 代码。我建议你学习一下 Swift optional。这是一个很好的来源: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
}
})