2016-09-07 3 views
1

Я конвертирую приложение из swift 2 в swift 3, и я пытаюсь использовать CMMotionManager, но он дает мне эту ошибку, когда я пытаюсь вызвать функцию .startAccelerometerUpdates() ... Однако не поймите, что случилось.Swift 2 to 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. Следовательно, смените NSError на Error. И если вы хотите предотвратить проблему производительности несколькими экземплярами CMMotionManager, используйте SwiftyMotionManager.