2016-09-07 55 views
1

我正在将应用程序从swift 2转换为swift 3,并且我试图使用CMMotionManager,但是当我尝试调用.startAccelerometerUpdates()函数时,它给了我这个错误...不知道什么是错的。Swift 2到Swift 3.0 motionManager

这是我如何初始化经理:

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) ->()')

谢谢!

回答

4

这个神秘的错误信息归结为:在Swift 3中,NSError被桥接到Error。写这样的代码和问题应该消失:

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

Swift3中有很多变化。特别是在表达中。许多NS类型的后缀都被删除,例如NSError为Error,NSData为Data。 因此,将NSError更改为Error。如果要防止CMMotionManager的多个实例出现性能问题,请使用SwiftyMotionManager