1

我在许多 iOS 标头中看到使用了 (^),但我从未遇到过为什么使用该标志的原因。有人可能想对此有所启发吗?

谢谢。

4

4 回答 4

11

这些通常表示“块”。请参阅块编程主题

或者,如果您观看WWDC 2012 会议 712的开始,他们还会带您浏览具有历史背景的街区。

于 2012-11-21T05:11:06.213 回答
5

它表示一个块。块是一种语法,允许您创建回调函数,并将其作为参数传递给方法。在其他语言中,这类似于闭包、lambda 或匿名类。

例如,列出的参数: void(^)(NSString *myStr) 期望您传入一个返回 void 的块/函数,并接受一个 NSString 指针。

您可以使用以下语法根据方法中声明的预期参数创建一个块:

^(<Parameters>) { <Body> } 

例如,需要块参数的方法可能如下所示:

-(void)doSomething:(void(^)(NSString *myStr))theBlock;

...并且可以这样调用:

[self doSomething:^(NSString *myStr) { NSLog(@"The String is: %@", myStr); }];

您的块将doSomething:像函数一样被回调,使用参数名称:

-(void)doSomething:(void(^)(NSString *myStr))theBlock {
  theBlock(@"Hello!");
}

...这将显示:

The String is: Hello!
于 2012-11-21T05:21:16.087 回答
3

^ 字符用于块,特别是块参数。

于 2012-11-21T05:11:32.500 回答
2

如果您要问为什么要在块中使用字符“^”,那是因为剩下的字符相对较少:

  1. 适用于所有典型键盘。
  2. 完全可以使用 - 即在语言中并不重要并且会发生冲突。
  3. 不要看起来很傻。

这实际上将其缩小到只有两个或三个,而选择那些“^”是因为,嗯,因为。

如果您想详细了解讨论,llvm.org 邮件列表等上可能对此有记录。

You could also look at the minutes from the C++11 committee meetings on lambdas, which went through basically the same process.

于 2012-11-21T06:14:27.743 回答