【发布时间】:2021-01-20 23:24:04
【问题描述】:
我在位置管理器类中有一个函数,可以获取用户的当前位置坐标。对于我在另一个视图中的使用,它更新得太频繁了。我正在尝试想出一种方法来减少获取位置的频率或次数有限,但无法想出任何东西。我的猜测是它需要时间戳或我不熟悉的方法。非常感谢任何帮助。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
// self.location = location does the copying here too frequently
self.location = location
self.reverseGeocode()
}
解决方案:
经过多次试验和错误,最终解决方案是 Observable Object 属性包装器和 State Object 属性包装器之间的区别。我的问题是 Observable Object 属性包装器允许我在视图中使用的变量不断变化,这在我的特定情况下不是我想要的。一旦我将其更改为状态对象,它就会完全按照我的意愿执行,即在位置更改时更新一次。
对于那些感兴趣的人,这里有一篇很好的博客文章,概述了这些主要区别: https://www.donnywals.com/whats-the-difference-between-stateobject-and-observedobject/.
【问题讨论】:
标签: ios swift swiftui core-location