Swift 2到Swift 3.0 motionManager

时间:2016-09-07 15:03:36

标签: ios swift swift3 cmmotionmanager

我正在将应用程序从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?)    - > ()'到预期的参数类型'CMAccelerometerHandler'(又名'(可选,可选) - >()')

谢谢!

2 个答案:

答案 0 :(得分:4)

隐秘的错误消息可归结为:在Swift 3 NSError中桥接到Error。写下这样的代码,问题就会消失:

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

答案 1 :(得分:1)

Swift3有很多变化。尤其是表情。会删除许多 NS 类型后缀,例如NSError为错误,NSData为数据。 因此,请将NSError更改为Error。如果您想要防止CMMotionManager的多个实例出现性能问题,请使用SwiftyMotionManager