2016-09-07 93 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