【问题标题】:How make function of returning address, but not only getting address?如何实现返回地址的功能,而不仅仅是获取地址?
【发布时间】:2020-05-12 12:21:55
【问题描述】:

我将创建返回地址字符串的函数。 但下面的函数返回“”的空字符串。

如何制作返回地址函数?

    let defaultLocation = CLLocation(latitude: 35.17944, longitude: 129.07556)

    func convertToPlaceMark(_ location: CLLocation, data: Any?) -> String {
            var str: String? = ""
        CLGeocoder().reverseGeocodeLocation(location) {
               places,err in 

               if err != nil {
                  print("geocoder error")
                  return
               }
               let placeMark1: CLPlacemark? = places!.last
               if placeMark1 != nil {
                    str = placeMark1?.name     // "1001 Jungang-daero\n" <--- I need function that return this value
                    print(str!)
                }
          }
         return str!
     }

     print(convertToPlaceMark(defaultLocation, data: nil)) // "\n"

【问题讨论】:

标签: swift mapkit clgeocoder


【解决方案1】:

是的,这个函数总是返回空字符串,因为 CLGeocoder().reverseGeocodeLocation(location) 需要时间从 Location 获取地址,同时你的 return str! 也执行所以你得到空字符串。

使用闭包从位置获取地址。

func convertToPlaceMark(_ location: CLLocation, _ handler: @escaping ((String?) -> Void)) {

       CLGeocoder().reverseGeocodeLocation(location) {
           places,err in

           if err != nil {
               print("geocoder error")
               handler(nil)
               return
           }
           let placeMark1: CLPlacemark? = places!.last
           handler(placeMark1?.name)
       }
   }

用法

convertToPlaceMark(location) { (address) in
        if let address = address {
            print(address)
        }
    }

【讨论】:

  • 感谢您的回答,但我不需要您的回答,因为您的代码与没有处理程序的代码相同。在所有结果地址值都不需要插入处理程序参数。不对吗?
  • 如果你不使用闭包,你总是会得到空字符串,或者如果你在主线程中调用函数,你的用户界面可能会暂时冻结。
  • 我知道你的意思......但处理程序也没有用。因为我需要返回值函数,而不是设置函数。
  • 我认为这是正确的做法。 @macmini,您需要了解完成处理程序的工作原理,但还要查看我认为您的问题与 重复的问题中接受的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多