如何实现返回地址的功能,而不仅仅是获取地址?

How make function of returning address, but not only getting address?

我将使用 returning 地址字符串。 但是下面的函数 return 是“”的空字符串。

如何实现return地址功能?

    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"

是的,这个函数总是 return 空字符串,因为 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)
        }
    }