I am converting an app from swift 2 to swift 3 and I'm trying to use the CMMotionManager, but it gives me this error when I try to call the .startAccelerometerUpdates() function... No clue what's wrong though.
This is how I initialize the manager:
let motionManager = CMMotionManager()
Trying to call the function:
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) -> ()')
Thanks!
The cryptic error message boils down to this: in Swift 3
NSError
is bridged toError
instead. Write your code like this and the problem should go away:There are many changes in Swift3. Especially in expressions. Many NS suffix of types are removed such as
NSError
to Error,NSData
to Data. Therefore, changeNSError
toError
. And if you want to prevent performance issue by multiple instances ofCMMotionManager
, use SwiftyMotionManager.