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 的 AWSDynamoDB 2.4.9 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]:发送到实例的无法