【发布时间】:2018-06-01 15:22:20
【问题描述】:
我一直在环顾四周,但没有找到防止任何事情发生的方法,直到某个功能完成。基本上,函数下方的事件发生在函数之前。让我向您展示代码和控制台输出。
代码:
if locationSwitch.isOn == true {
let url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=\(location.latitude),\(location.longitude)&result_type=locality&key=AIzaSyDI-ZacHyPbLchRhkoaUTDokwj--z_a_jk"
loadUrl(url: url) { optionalLocation in
guard let nonOptionalLocation = optionalLocation else {
// Location was nil; Handle error case here
return
}
// Do something with your location here, like setting UI or something
print("Optional Location: \(optionalLocation)")
print("nonOptional Location: \(nonOptionalLocation)")
cityState = nonOptionalLocation
print("cityState: \(cityState)")
print("Within Func")
}
print("Within If")
} else {
lat = 0.0
lng = 0.0
cityState = ""
}
print("After If")
print("cityState Outside If Statement: \(cityState)")
CoreDataHandler.savePhotoObject(locationCoordinateLatitude: lat, locationCoordinateLongitude: lng, locationLocality: cityState, dateCreated: date, discription: discriptionBox.text!, photo: selectedImageData!)
}
控制台输出:
Before If
Within If
After If
cityState Outside If Statement:
Optional Location: Optional("San Francisco, CA, USA")
nonOptional Location: San Francisco, CA, USA
cityState: San Francisco, CA, USA
Within Func
如你所见
Optional Location: Optional("San Francisco, CA, USA")
nonOptional Location: San Francisco, CA, USA
cityState: San Francisco, CA, USA
Within Func
应该在之前
Within If
我相信这是因为 loadUrl 函数需要很长时间才能完成,以至于代码越过它并完成它下面的代码,然后 loadUrl 完成,然后在其他所有内容之后打印。这不会是一个问题,除了设置等于nonOptionalLocation 的变量在loadUrl 函数完成后被调用,因为loadUrl 在代码的其余部分结束后完成了应该等于的变量nonOptionalLocation 实际上等于""。
现在有人知道如何完成这项工作吗?我认为我需要在loadUrl 完成之前阻止任何事情的发生,但如果您知道另一种方法,请分享。谢谢你。
【问题讨论】:
-
@PatrickHaertel 绝对相关。
-
@vadian 和马特请原谅我的最后评论。我同意你的观点,这是相关的。多亏了 vadian,我才在我的代码中解决了这个问题之后才浏览了这篇文章,而且我一定是快速浏览了这篇文章,因为我显然没有抓住重点。请原谅我。