objective-c - Swift 中正确的 block 语法是什么

标签 objective-c syntax swift block

所以我正在用 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/

相关文章:

json - 为什么我的 Swift 代码无法根据 .json 数据中的值正确计算分数

arrays - 如何找到数组中每个项目的字符数

objective-c - 从函数外部的 C 风格函数访问 NSString

objective-c - Objective c Twitter Api : which to use?

python - 为什么在 IF 条件后出现 'Invalid syntax' 错误?

javascript - 属性名称的 JSON 语法

python - iOS分块上传

ios - 具有自动布局的UITableView中的动态列

php - 用 ; 关闭语句或不?

ios - 在 Swift 中制作 Integer 类型的 NSUserDefault