如何在功能之外获取加速度计数据?

How to get accelerometer data outside function?

我只在函数内部获取 x、y、z 加速度计数据。

如何在外部也获取这些值(我使用的是真实设备,iPhone 4)?

import CoreMotion
//...
var Ax: Double?
var Ay: Double?
var Az: Double?

if motionManager.accelerometerAvailable {
            self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) {
            (data, error) in
            dispatch_async(dispatch_get_main_queue()) {
                var Ax = data.acceleration.x
                var Ay = data.acceleration.y
                var Az = data.acceleration.z
            }
        }

    } else {
        println("Accelerometer is not available")
    }

println("\(Ax)") // nil value

这是第二个版本,但结果一样(哪个更好,有的话?我需要后台和前台的加速度计数据):

import CoreMotion
//...
var Ax: Double?
var Ay: Double?
var Az: Double?

if motionManager.accelerometerAvailable {
        let queue = NSOperationQueue()
        motionManager.startAccelerometerUpdatesToQueue(queue, withHandler: {(data: CMAccelerometerData!, error: NSError!) in

            var Ax = "\(data.acceleration.x)"
            var Ay = "\(data.acceleration.y)"
            var Az = "\(data.acceleration.z)"
            }
        )

    } else {
        println("Accelerometer is not available")
    }

println("\(Ax)") // nil value

Ax变量是nil,因为你在处理程序中重新定义了AxAyAz。此外,处理程序在主要功能结束后被调用,因此 print() 语句在从加速度计接收数据之前被调用。您需要重构代码以考虑到这一点,可能会更新处理程序中的 UI。