CMPedometer queryPedometerData()方法中似乎存在一个错误。该方法在某些结束时间返回0个步骤,但是时间戳大于或等于1秒的同一查询将返回正确的步骤数
例如
foo&
getStepsBetweenDates方法看起来像这样
self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2: NSDate(timeIntervalSince1970: 1543393044) as Date) returns (Int) 1488
self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2: NSDate(timeIntervalSince1970: 1543393045) as Date) returns (Int) 0
self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2: NSDate(timeIntervalSince1970: 1543393046) as Date) returns (Int) 1488
答案 0 :(得分:1)
queryPedometerData
是一个异步调用
通常,您不想返回getStepsBetweenDates
调用中的步骤,因为它是异步的。
如果您将var steps = 0
更改为var steps = [some random int]
,则由于设置了比赛条件,很可能会找回该数字而不是0。
更理想的情况是将代码实现为闭包/回调或另一种异步处理形式。
例如:
self.pedometer.queryPedometerData(from: date1, to: date2) { (data, error) in
// Do something here with data.numberOfSteps
}
这是一篇关于Medium的关于异步代码的文章:
https://medium.com/ios-os-x-development/managing-async-code-in-swift-d7be44cae89f