我只是想将这个Objective-C块转换为swift但似乎有问题,我无法解决。这些变量都不是可选的。
目标-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 Method Signature
CLPlacemark.hnk_placemarkFromGooglePlace(place:
HNKGooglePlacesAutocompletePlace!, apiKey:String!, completion:
((CLPlacemark!, String!, NSError!) -> Void)
答案 0 :(得分:0)
Swift将NSString桥接到块中。您仍然在回调中使用NSString,但应使用String。
答案 1 :(得分:0)
如果您正在使用Swift 1.2(或者甚至是1.1),String和NSString是兼容的,但编译器要求您投射它们。想一想:NSString(string: mySwiftString)
或String(myNSString)
。该错误表明您同时使用了String
和NSString
,请确保您在正确的位置使用正确的位置。