所以我正在用 Swift 重写一些 Obj-C 代码,偶然发现了一个让我发疯的 block 。 我已经看过 apple 提供的文档和 stackoverflow 上的其他一些资源。不幸的是,我还找不到解决方案。我已经得到了我想用 Swift 重写的那段 obj-c 代码。也许你可以帮我弄清楚该怎么做。我真的很感激!
- (void)startSearchWithCompletionHandler:(PHBridgeSearchCompletionHandler)completionHandler;
然后像这样调用:
[self.bridgeSearch startSearchWithCompletionHandler:^(NSDictionary *bridgesFound) { ...
到目前为止,我想到了这个:
var bridgeSearching : PHBridgeSearching = ...
bridgeSearching.startSearchWithCompletionHandler { (bridgesFound: AnyObject!) -> PHBridgeSearchCompletionHandler in
}
最佳答案
如果区 block 签名是
void (^PHBridgeSearchCompletionHandler) (NSDictionary *)
那么闭包应该是这样的:
{ (bridgesFound: NSDictionary?) -> () in
...
}
但是如果你知道字典包含相同类型的对象,比方说Int
,键类型是String
,那么你也可以把它写成
{ (bridgesFound: [String:Int]) -> () in
...
}
是否将其设为可选取决于您的使用方式。
关于objective-c - Swift 中正确的 block 语法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481372/