gpt4 book ai didi

ios - 为什么我的 MKCoordinateRegion 为零?

转载 作者:行者123 更新时间:2023-11-28 06:18:13 26 4
gpt4 key购买 nike

所以我有以下功能来为我的应用程序设置我的 map 区域:

func mapRegion() -> MKCoordinateRegion {

databaseHandle = databaseRef.child("RunList").child(runName).observe(.value, with: { (snapshot) in

let runData = snapshot.value as? [String: AnyObject]
self.minLat = runData?["startLat"] as? Double
self.minLng = runData?["startLong"] as? Double
self.maxLat = runData?["endLat"] as? Double
self.maxLng = runData?["endLong"] as? Double
print("testing")
print(self.minLat!)
print(self.maxLng!)

self.coordinate = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: (self.minLat! + self.maxLat!)/2,
longitude: (self.minLng! + self.maxLng!)/2),
span: MKCoordinateSpan(latitudeDelta: (self.maxLat! - self.minLat!)*1.1,
longitudeDelta: (self.maxLng! - self.minLng!)*1.1))

})

return coordinate

}

我已经在我的类的顶部初始化了以下变量:

var minLat: Double!
var minLng: Double!
var maxLat: Double!
var maxLng: Double!
var coordinate: MKCoordinateRegion!

我正在尝试按如下方式设置 map 区域:

override func viewDidLoad() {
super.viewDidLoad()
configureView()
mapView.region = mapRegion()
}

我遇到的错误是在我将坐标区域设置在包含 mapRegion() 中的 databaseHandle 的代码块下的行中。当代码运行时,我在“返回坐标”行下收到以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

据我了解,发生这种情况是因为“坐标”没有值并且是可选的。为什么即使我使用全局变量设置坐标也没有值?我觉得我错过了一些如此简单的东西!

谢谢

最佳答案

您的代码不起作用,因为 observe 异步工作,并且不可能从包含异步任务的方法返回值。

你需要一个完成处理器

func mapRegion(completion: (MKCoordinateRegion)->()) {

databaseHandle = databaseRef.child("RunList").child(runName).observe(.value, with: { (snapshot) in

let runData = snapshot.value as? [String: AnyObject]
self.minLat = runData?["startLat"] as? Double
self.minLng = runData?["startLong"] as? Double
self.maxLat = runData?["endLat"] as? Double
self.maxLng = runData?["endLong"] as? Double
print("testing")
print(self.minLat!)
print(self.maxLng!)

let region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: (self.minLat! + self.maxLat!)/2,
longitude: (self.minLng! + self.maxLng!)/2),
span: MKCoordinateSpan(latitudeDelta: (self.maxLat! - self.minLat!)*1.1,
longitudeDelta: (self.maxLng! - self.minLng!)*1.1))
completion(region)

})
}

并使用它

mapRegion() { region in
mapView.region = region
// do other things with the region
}

边注:

代码中问号太多。使用可选绑定(bind)来安全地解包可选。

关于ios - 为什么我的 MKCoordinateRegion 为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44471463/

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