xcode geocoder.geocodeAddressString 今天不再适用于快速更新

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32655247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 07:51:41  来源:igfitidea点击:

geocoder.geocodeAddressString no longer works with swift update today

xcodeswiftclgeocoder

提问by Jason G

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

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

shows that there were a couple of changes

显示有一些变化

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

to:

到:

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

my code was:

我的代码是:

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)
    }
})

tried:

试过:

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)
})

it just keeps saying that its not allowed. tried a few different combinations. this is do to the latest update to xcode / swift

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

thanks in advance

提前致谢

回答by Rob

In Swift 2:

在 Swift 2 中:

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

})

In Swift 3, replace NSError?with Error?:

在 Swift 3 中,替换NSError?Error?

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

})

Or, easier, just let it infer the correct types for you:

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

geocoder.geocodeAddressString(address) { placemarks, error in

}

回答by Dharmesh Kheni

Use geocodeAddressStringthis way:

使用geocodeAddressString这种方式:

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

})

And it will work fine.

它会正常工作。

回答by JP Quintao

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

})

Just change NSErrorto Errorand will it work

只需更改NSErrorError并且它会起作用

回答by jimijon

This no longer works....

这不再有效....

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

throws an EXC error

抛出 EXC 错误