在 Swift 下使用 startDeviceMotionUpdates 3
Using startDeviceMotionUpdates under Swift 3
是的,我已经看到了 ,但我仍然无法让它工作。我以前的 Swift2 代码是...
motionMgr.startDeviceMotionUpdatesToQueue(NSOperationQueue(), withHandler: handleMove)
调用了:
func handleMove(motion: CMDeviceMotion?, error: NSError?) {
...
}
这在 Swift3 下已经改变,现在 startDeviceMotionUpdatesToQueue
使用闭包。我一辈子都想不出如何调用我现有的方法。我意识到 NSError
变成了 Error
和其他小的变化,但是闭包调用的语法让我很困惑。
这应该适合你,Swift 3.
中只有一些重命名
motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: handleMove)
func handleMove(motion: CMDeviceMotion?, error: Error?) {
// ...
}
handler
属于 CMDeviceMotionHandler
类型,它被定义为 typealias
闭包:
typealias CMDeviceMotionHandler = (CMDeviceMotion?, Error?) -> Void
我们只需要提供一个闭包(或函数,因为函数是一个闭包),它接受两个参数(CMDeviceMotion?
和 Error?
)和 returns什么都没有 (Void
).
或者,您可以提供闭包而不是像这样的函数:
motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: { deviceMotion, error in
// ...
})
或使用新的尾随闭包语法:
motionMgr.startDeviceMotionUpdates(to: OperationQueue()) { deviceMotion, error in
// ...
}
是的,我已经看到了
motionMgr.startDeviceMotionUpdatesToQueue(NSOperationQueue(), withHandler: handleMove)
调用了:
func handleMove(motion: CMDeviceMotion?, error: NSError?) {
...
}
这在 Swift3 下已经改变,现在 startDeviceMotionUpdatesToQueue
使用闭包。我一辈子都想不出如何调用我现有的方法。我意识到 NSError
变成了 Error
和其他小的变化,但是闭包调用的语法让我很困惑。
这应该适合你,Swift 3.
中只有一些重命名motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: handleMove)
func handleMove(motion: CMDeviceMotion?, error: Error?) {
// ...
}
handler
属于 CMDeviceMotionHandler
类型,它被定义为 typealias
闭包:
typealias CMDeviceMotionHandler = (CMDeviceMotion?, Error?) -> Void
我们只需要提供一个闭包(或函数,因为函数是一个闭包),它接受两个参数(CMDeviceMotion?
和 Error?
)和 returns什么都没有 (Void
).
或者,您可以提供闭包而不是像这样的函数:
motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: { deviceMotion, error in
// ...
})
或使用新的尾随闭包语法:
motionMgr.startDeviceMotionUpdates(to: OperationQueue()) { deviceMotion, error in
// ...
}