我正在阅读本教程并遇到了这行代码,这让我很难过:
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
int i = 0;
do {
MKMapItem *mapItem = [response.mapItems objectAtIndex:i];
[self.mapItems addObject:mapItem];
i++;
} while (i < response.mapItems.count);
[[NSNotificationCenter defaultCenter] postNotificationName:@"Address Found" object:self];
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:@"Not Found" object:self];
}
}];
我不理解的部分如下:^(MKLocalSearchResponse *response, NSError *error) {
那个插入符号^
以及之后发生的事情是我不知道的。
我查看了一些文档但找不到任何内容。
答案 0 :(得分:5)
^ 表示目标c中的块。它就像一个匿名函数,可以分配给变量或作为参数传递给函数,如示例所示。阅读Apple文档中的更多内容:
定义一个块:
^{
NSLog(@"This is a block");
}
将一个块分配给变量:
void (^simpleBlock)(void);
// or
simpleBlock = ^{
NSLog(@"This is a block");
};
拨打电话:
simpleBlock();
使用块作为消息的参数:
- (IBAction)fetchRemoteInformation:(id)sender {
[self showProgressIndicator];
XYZWebTask *task = ...
[task beginTaskWithCallbackBlock:^{
[self hideProgressIndicator];
}];
}
示例来自Apple文档
答案 1 :(得分:3)
^
表示块 - 一组可以像变量一样传递的代码。
在你的例子中:
^(MKLocalSearchResponse *response, NSError *error) { ... }
|---------------------------------------------| |---|
Arguments (you can use these in the block) ^ Code goes here
由于您使用的是完成处理程序,因此您的块不会向其调用者返回任何内容。在完成搜索时,MapKit搜索东西调用该块中的所有代码。
有一篇来自Apple的关于这个主题here的好文件。