gpt4 book ai didi

swift - 最小化使用 LocationManager 时对我的服务器发出的 HTTP 请求

转载 作者:搜寻专家 更新时间:2023-11-01 06:55:15 25 4
gpt4 key购买 nike

在下面的代码中,我使用 LocationManager 获取用户的当前邮政编码,然后向我自己的服务器发出 HTTP 请求以获取一些基于用户邮政编码的数据。我的问题是,每次调用 locationManager 时,我下面的代码都会发出 HTTP 请求,通常每次调用三次。理想情况下,我只想在找到最后一个地标后发出 HTTP 请求。

如何最大限度地减少对我自己的服务器发出的 HTTP 请求?

override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)-> Void in
if error != nil {
//AlertView to show the ERROR message
}
if placemarks!.count > 0 {
let placemark = placemarks![0]
var zipCode = placemark.postalCode ?? ""
makeHTTPRequest(zipCode) // this is called 3 times
self.locationManager.stopUpdatingLocation()

}else{
print("No placemarks found.")
}
})
}

最佳答案

您的代码的问题在于,在您执行 self.locationManager.stopUpdatingLocation()。要解决这个问题:

  • 定义一个全局变量var didFindZipCode: Bool = false
  • 在检查地标数量的 if block 的开头添加 guard didFindZipCode == false else { return }
  • 在 guard 语句之后设置 didFindZipCode = true

只要您想要再次开始更新位置,请记住将 didFindZipCode 设置为 false

关于swift - 最小化使用 LocationManager 时对我的服务器发出的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53904442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com