作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法弄清楚如何使用反向地理编码将街道地址,城市等显示为图钉上的子标题-每当用户添加图钉时。到目前为止,这是我的代码。我假设我必须编写“ annotation.subTitle = CLLocationCoordinate2D”以便在图钉上显示它,但是它似乎不起作用。我该怎么办?
最佳答案
听起来这里对Swift语法有些困惑,所以我将尝试解决这个问题,看看它是否可以解决您要解决的问题。如果我在解释您已经理解的代码,请原谅我。
阅读示例代码:
对于starers,我看到一个函数声明:
func action(gestureRecognizer: UIGestureRecognizer) { ...
action
的函数,带有一个名为
gestureRecognizer
的参数,它是一个
UIGestureRecognizer
。我假设问题中未显示的某个地方已经创建了
UIGestureRecognizer
,当它检测到适当的手势时将调用此函数。
action
函数中,我们将“已识别手势”打印到控制台。我假设您会看到,如果您运行此应用并在适当的视图上执行适当的手势。
touchPoint
的本地常量中。如果查看
UIGestureRecognizer class reference,我们会看到
UIGestureRecognizer
的
location
返回
CGPoint
类型,即“在局部坐标系中标识手势位置的点”。到目前为止,一切都还不错,好像我们正在检测手势,并确定手势在某些视图中发生的位置(可能是敲击)。
func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CLGeocodeCompletionHandler)
reverseGeocodeLocation
的新嵌套函数。这并不是很糟糕,您可能想创建一个嵌套函数来定义一些可重用的行为(
Swift Programming Language中对嵌套函数进行了讨论)。但是,在这种情况下,这似乎是
CLGeocoder
中现有方法的副本,我怀疑您要执行的操作是调用该现有函数,而不是定义行为完全无关的同名新函数。
reverseGeocodeLocation
嵌套函数从不调用,因此该代码从不执行。在我看来,这似乎是要作为传递给
CLGeocoder
的
reverseGeocodeLocation
的完成处理程序,一旦对位置进行反向地理编码,该处理程序便会执行。
CLGeocoder
的现有函数,我们需要获取
CLGeocoder
的实例。这是一个实例方法,我们需要引用一些现有的Geocoder对象,我们可以在该对象上调用此函数。然后,我们需要构建一组有效的参数以传递给
reverseGeocodeLocation
。
CLGeocoder
没有任何自定义初始化程序,我们不需要向其提供任何数据即可创建实例,因此我们只需调用
CLGeocoder()
reverseGeocodeLocation
,我们看到了一组稍微复杂的参数:
func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CLGeocodeCompletionHandler)
reverseGeocodeLocation
是
location
,还不错,我们可以从一对坐标中构建一个,所以我敢打赌,有一种方法可以将
CLLocation
屏幕坐标的位置转换为纬度和经度。
touchPoint
是一个
completionHandler
,稍微复杂一点,它是一个
closure,它捕获某些行为并提供自己的两个参数。
import CoreLocation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true // We're using asynchronous behavior here so we need this to tell the Playground to keep running until our reverse geocoding finishes rather than stopping immediately when it reaches the end of our example code.
let location = CLLocation(latitude: 37.332112, longitude: -122.0329646) // Somewhere near Apple HQ should geocode successfully
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) { (placemarks, error) in
print(placemarks?.first?.name)
PlaygroundPage.current.finishExecution() // Now that our async task has completed we can tell the playground that it is time to stop running.
}
CLGeocodeCompletionHandler
来执行反向地理编码,还需要存储它直到完成。如果我们只是在
CLGeocoder
函数中创建地址解析器,则该功能将完成,并且该地址解析器可能在有时间完成地址解析之前被销毁。解决此问题的一种方法是将地址解析器添加为包含此
action
函数的视图控制器(或其任何类)的属性,以便地址解析器与使用它的对象一样长。
action
的视图坐标转换为
touchPoint
。如果我们要触摸
CLLocation
,那么它的
MKMapView
功能可能正是我们所需要的。
关于swift - 针脚反向地理编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118139/
我是一名优秀的程序员,十分优秀!