2016-09-07 13 views
1

swift 2からswift 3にアプリを変換していますが、CMMotionManagerを使用しようとしていますが、.startAccelerometerUpdates()関数を呼び出そうとするとこのエラーが表示されます...しかし、何が間違っているか分からない。Swift 2 to Swift 3.0 motionManager

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

ありがとう:関数を呼び出すしようと

let motionManager = CMMotionManager()

は、これは私がマネージャーを初期化する方法です!

答えて

4

謎のエラーメッセージは以下のとおりです。Swift 3 NSErrorErrorにブリッジされています。このようなコードを書くと、問題は消えるはずです。

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

Swift3には多くの変更があります。特に表現の中で。多くの場合、NSの接尾辞は、NSErrorからエラー、NSDataからデータのように削除されます。 したがって、NSErrorErrorに変更してください。 CMMotionManagerの複数のインスタンスによるパフォーマンスの問題を防ぐには、SwiftyMotionManagerを使用します。