Swift 2 到 Swift 3.0 运动管理器

Posted

技术标签:

【中文标题】Swift 2 到 Swift 3.0 运动管理器【英文标题】:Swift 2 to Swift 3.0 motionManager 【发布时间】:2016-09-07 15:03:35 【问题描述】:

我正在将一个应用程序从 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'(又名'(可选,可选)-> ()')

谢谢!

【问题讨论】:

【参考方案1】:

神秘的错误信息归结为:在 Swift 3 中,NSError 被桥接到 Error。像这样编写代码,问题应该会消失:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Swift 2 到 Swift 3.0 运动管理器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 3.0 中制作时间选择器视图?

适用于 Swift 3.0 的 AWSDynamoDB 2.4.9 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]:发送到实例的无法

Swift 3.0 字符串问题

Swift 3.0 多个选择器视图无法识别数据源变量

升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告

编码复杂对象swift 3.0