Swift 2 到 Swift 3.0 运动管理器

Swift 2 to Swift 3.0 motionManager

我正在将应用程序从 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)
    }

Error: Cannot convert value of type '(CMAccelerometerData?, NSError?) -> ()' to expected argument type 'CMAccelerometerHandler' (aka '(Optional, Optional) -> ()')

谢谢!

神秘的错误消息归结为:在 Swift 3 中 NSError 被桥接到 Error。像这样写你的代码,问题就会消失:

motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: Error?) in

Swift3 有很多变化。尤其是在表达上。许多 NS 类型的后缀被删除,例如 NSError 到错误,NSData 到数据。 因此,将 NSError 更改为 Error。如果您想防止 CMMotionManager 的多个实例出现性能问题,请使用 SwiftyMotionManager.