(^)的目的在iOS中签名

kfo*_*rim 1 iphone cocoa objective-c ipad ios

我已经在许多iOS标题中看到(^)被使用,我从来没有遇到过为什么使用该标志的推理.有人可能想开导这个吗?

谢谢.

Rob*_*Rob 11

那些经常表示"块".请参阅块编程主题.

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


J S*_*iro 5

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

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

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

^(<Parameters>) { <Body> } 
Run Code Online (Sandbox Code Playgroud)

例如,期望使用块参数的方法可能如下所示:

-(void)doSomething:(void(^)(NSString *myStr))theBlock;
Run Code Online (Sandbox Code Playgroud)

...可以这样称呼:

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

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

-(void)doSomething:(void(^)(NSString *myStr))theBlock {
  theBlock(@"Hello!");
}
Run Code Online (Sandbox Code Playgroud)

...将显示:

The String is: Hello!
Run Code Online (Sandbox Code Playgroud)