如何正确使用Swift在iOS中检索加速计数据?

我试图从iPhone的加速度计(我自己的iPhone 5s)logging数据,并使用String(format: "%.2f", data)在屏幕上设置一个标签String(format: "%.2f", data)其中data是特定轴I的值想要logging。 为此,我build立了一个CMMotionManager并开始logging加速度计数据,并且我有一个定时器不断更新标签中的文本。 但是,我从Xcode得到一个错误:“致命错误:意外地发现零,而解包一个可选值”。 这是相关的代码:

 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //if accelerometer can be used, start it if (motionManager.accelerometerAvailable) { motionManager.accelerometerUpdateInterval = 0.1 motionManager.startAccelerometerUpdates() let timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("update"), userInfo: nil, repeats: true) } } func update () { if (motionManager.accelerometerActive) { accelX.text = String(format: "%.2f", motionManager.accelerometerData.acceleration.x) } } 

当我更改accelX.text分配给一个简单的string,错误停止,所以我认为创build错误的可选variables是加速度计。 据我所知,如果你有任何build议,或者如果我完全错了,有一个更好,更简单的方法,如果你能帮助我,我一定会很感激。

NSHipster有一个很好的文章来谈论核心议案: http ://nshipster.com/cmdevicemotion/

定期用运动数据更新UI的更好的方法是使用如下所示的模式:

 if manager.accelerometerAvailable { manager.accelerometerUpdateInterval = 0.1 manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) { [weak self] (data: CMAccelerometerData!, error: NSError!) in accelX.text = String(format: "%.2f", data.acceleration.x) } }