我正在使用位置管理器并尝试计算用户在过去60秒内的平均速度。
当调用didUpdateLocations
时,我每秒都会从位置管理器获得用户的速度。然后我将该速度附加到数组中。
我的计划是根据didUpdateLocations
中记录的这一系列速度计算平均速度。
但是,在开始时,数组为空。虽然它每秒都会填充,但我仍然想要计算平均速度,即使阵列还没有60速度。在这种情况下,我只需要使用记录的值,例如,在5秒和5个速度之后,将使用这些值计算平均速度。一段时间后,数组将被填充,并且附加最新的速度值会使最旧的速度值从阵列中删除。
有更简单的方法来实现这个目标吗?
答案 0 :(得分:1)
您当前的解释听起来不错。您仍然可以获得平均速度,而无需使用阵列。您可以像这样设置速度数组:
let max = 60
var speeds = Array<Float>()
然后,每次调用didUpdateLocations
方法时,都可以将用户的速度添加到此speeds
数组中。但是,由于您不希望阵列超过60个项目,因此您可以设置最大值并删除较旧的速度以将长度保持为60.您可以这样实现:
// In didUpdateLocations():
if speeds.count == max {
speeds.remove(at: 0)
}
speeds.append(newSpeed)
然后,要计算它们的平均速度,只需从速度数组中取出项目,然后将它们的总和除以它们的数量来平均它们。
var total: Float = 0.0
speeds.forEach { speed in
total += speed
}
var averageSpeed = total / Float(speeds.count)
print(averageSpeed)