我只是想将这个 Objective-C block 转换为 swift,但似乎有一个问题,我无法解决。没有一个变量是可选的。
Objective-C - 有效
[CLPlacemark hnk_placemarkFromGooglePlace:place
apiKey:YOUR_API_KEY
completion:^(CLPlacemark *placemark, NSString *addressString, NSError *error) {
}];
Swift - 给出错误
CLPlacemark.hnk_placemarkFromGooglePlace(placeAtIndexPath(indexPath),"YOUR_API_KEY",
completion:{ (placemark:CLPlacemark!, addressString: NSString!, error: NSError!) -> Void in
})
错误消息:
Cannot invoke 'hnk_placemarkFromGooglePlace' with an argument list of type '(HNKGooglePlacesAutocompletePlace!, String, completion: (CLPlacemark!, NSString!, NSError!) -> Void)'
Swift 方法签名
CLPlacemark.hnk_placemarkFromGooglePlace(place:
HNKGooglePlacesAutocompletePlace!, apiKey:String!, completion:
((CLPlacemark!, String!, NSError!) -> Void)
最佳答案
Swift 在 block 中将 NSString 桥接到 String。您仍然在回调中使用 NSString,但应该使用 String。
关于ios - 将 Objective-C block 转换为 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147241/