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

问题描述 投票:0回答:2

我将执行返回地址字符串的功能。但是下面的函数返回空字符串“”。

如何使回信地址起作用?

    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
2个回答
0
投票

是,此函数总是返回空字符串,因为CLGeocoder().reverseGeocodeLocation(location)需要时间才能从位置获取地址,同时return str!也将执行,因此您将获得空字符串。

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


0
投票

尝试一下:

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
                return str!
            }
      }
 }

 print(convertToPlaceMark(defaultLocation, data: nil)) // "\n"
© www.soinside.com 2019 - 2024. All rights reserved.