我正在将应用程序从swift 2转换为swift 3并且我正在尝试使用CMMotionManager,但是当我尝试调用.startAccelerometerUpdates()函数时它给了我这个错误...但不知道有什么问题。
这是我初始化经理的方式:
let motionManager = CMMotionManager()
尝试调用该函数:
motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: NSError?) in
self!.outputAccelerationData(data!.acceleration)
}
错误:无法转换类型'的值(CMAccelerometerData?,NSError?) - > ()'到预期的参数类型'CMAccelerometerHandler'(又名'(可选,可选) - >()')
谢谢!
答案 0 :(得分:4)
隐秘的错误消息可归结为:在Swift 3 NSError
中桥接到Error
。写下这样的代码,问题就会消失:
motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: Error?) in
答案 1 :(得分:1)
Swift3有很多变化。尤其是表情。会删除许多 NS 类型后缀,例如NSError
为错误,NSData
为数据。
因此,请将NSError
更改为Error
。如果您想要防止CMMotionManager
的多个实例出现性能问题,请使用SwiftyMotionManager。