如何从位置管理器只复制一次用户位置? [英] How to copy user location only once from location manager?

查看:63
本文介绍了如何从位置管理器只复制一次用户位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在位置管理器类中有一个函数,用于获取用户的当前位置坐标。它更新太频繁,不适合我在另一个视图中使用。我正试图想出一种不那么频繁或次数有限的方法来获得这个位置,但我什么也想不出来。我的猜测是,它将需要时间戳或类似的方法,我不熟悉。我们非常感谢您的帮助。

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()
}

解决方案:

经过多次试验和错误,最终解决方案是可观察对象属性包装器和状态对象属性包装器之间的差异。我的问题是,可观察对象属性包装器允许我在视图中使用的变量不断变化,这不是我在特定情况下想要的。一旦我将其更改为State对象,它就会执行我希望它执行的操作,即在位置更改时更新一次。

对于那些感兴趣的人,这里有一篇很好的博客文章,概述了这些主要区别: https://www.donnywals.com/whats-the-difference-between-stateobject-and-observedobject/

推荐答案

如果目标是一次性了解我们的位置,则根本不要开始更新位置。相反,只需调用requestLocation。这将为您提供一次单个更新(在可能的延迟之后)。

这篇关于如何从位置管理器只复制一次用户位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆