[英]Swift 2 to Swift 3.0 motionManager
我正在將應用程序從swift 2轉換為swift 3,並且嘗試使用CMMotionManager,但是當我嘗試調用.startAccelerometerUpdates()函數時,它給了我這個錯誤……盡管不知道出了什么問題。
這是我初始化管理器的方式:
let motionManager = CMMotionManager()
嘗試調用該函數:
motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: NSError?) in
self!.outputAccelerationData(data!.acceleration)
}
錯誤:無法將類型“((CMAccelerometerData ?, NSError?)->()”的值轉換為預期的參數類型“ CMAccelerometerHandlerHandler”(又名“((Optional,Optional)->()”))
謝謝!
隱秘的錯誤消息可以歸結為:在Swift 3中, NSError
被橋接為Error
。 像這樣編寫代碼,問題應該消失:
motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: Error?) in
Swift3中有許多更改。 特別是在表達式中。 刪除了許多類型的NS后綴,例如NSError
到Error, NSData
到Data。 因此,將NSError
更改為Error
。 而且,如果要防止CMMotionManager
的多個實例出現性能問題,請使用SwiftyMotionManager 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.