将Objective-C块转换为Swift

时间:2015-06-30 19:51:34

标签: ios objective-c swift ios8

我只是想将这个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)

2 个答案:

答案 0 :(得分:0)

Swift将NSString桥接到块中。您仍然在回调中使用NSString,但应使用String。

答案 1 :(得分:0)

如果您正在使用Swift 1.2(或者甚至是1.1),String和NSString是兼容的,但编译器要求您投射它们。想一想:NSString(string: mySwiftString)String(myNSString)。该错误表明您同时使用了StringNSString,请确保您在正确的位置使用正确的位置。