【问题标题】:geocoder.geocodeAddressString no longer works with swift update todaygeocoder.geocodeAddressString 今天不再适用于快速更新
【发布时间】:2015-09-18 15:04:37
【问题描述】:

https://developer.apple.com/library/prerelease/mac/releasenotes/General/APIDiffsMacOSX10_11/Swift/CoreLocation.html

显示有一些变化

func geocodeAddressString(_ addressString: String!, completionHandler completionHandler: CLGeocodeCompletionHandler!)

到:

func geocodeAddressString(_ addressString: String, completionHandler completionHandler: CLGeocodeCompletionHandler)

我的代码是:

var geocoder = CLGeocoder()

geocoder.geocodeAddressString("\(event!.street), \(event!.city), \(event!.country)", completionHandler: {(placemarks: [AnyObject]!, error: NSError!) -> Void in
    if let placemark = placemarks?[0] as? CLPlacemark {
        self.event!.lat = placemark.location!.coordinate.latitude
        self.event!.long = placemark.location!.coordinate.longitude

        self.event!.getMiles(self.currentLocation!.location!.coordinate.latitude, clong: self.currentLocation!.location!.coordinate.longitude)
        var mile = self.event!.miles != nil ? NSString(format: "%.1f miles", self.event!.miles!) : "Location services off"
        self.milesButton.setTitle(mile as String, forState: .Normal)
    }
})

试过了:

var geocoder = CLGeocoder()
let address = "\(event!.street), \(event!.city), \(event!.country)"
geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]) in
     let placemark = placemarks[0]
     self.event!.lat = placemark.location!.coordinate.latitude
     self.event!.long = placemark.location!.coordinate.longitude
     self.event!.getMiles(self.currentLocation!.location!.coordinate.latitude, clong: self.currentLocation!.location!.coordinate.longitude)
     var mile = self.event!.miles != nil ? NSString(format: "%.1f miles", self.event!.miles!) : "Location services off"
     self.milesButton.setTitle(mile as String, forState: .Normal)
})

它只是一直说它不允许。尝试了几种不同的组合。这是对 xcode / swift 的最新更新的做法

提前致谢

【问题讨论】:

    标签: xcode swift clgeocoder


    【解决方案1】:

    在 Swift 2 中:

    geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
    
    })
    

    在 Swift 3 中,将 NSError? 替换为 Error?

    geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: Error?) -> Void in
    
    })
    

    或者,更简单,让它为您推断正确的类型:

    geocoder.geocodeAddressString(address) { placemarks, error in
    
    }
    

    【讨论】:

      【解决方案2】:

      这样使用geocodeAddressString

      geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
      
      })
      

      它会正常工作的。

      【讨论】:

      • 很高兴为您提供帮助..:)
      【解决方案3】:
      geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
      
      })
      

      只需将NSError 更改为Error 就可以了

      【讨论】:

        【解决方案4】:

        这不再有效....

          geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
                print("Test")
            } as! CLGeocodeCompletionHandler)
        

        引发 EXC 错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-28
          • 1970-01-01
          • 1970-01-01
          • 2020-02-27
          • 2022-11-19
          • 2014-08-14
          • 2018-11-19
          相关资源
          最近更新 更多