什么(void(^)(NSString *))作为方法参数在Objective-C中意味着什么?

时间:2012-12-08 09:20:19

标签: objective-c methods block

我必须使用我雇主的一些私人API,我有这样的方法:

- (void)login:(NSString *)username password:(NSString *)password delegate:(void(^)(NSString *))delegate;

(void(^)(NSString *))delegate的含义是什么?

这是参数,但我不知道这里必须有什么。

2 个答案:

答案 0 :(得分:4)

这是一个块指针。如果您不熟悉块,这基本上允许您将内联的匿名函数指定为参数。这里的签名表示该块将NSString作为参数,并且不返回任何内容。你可以这样使用它:

- (void)login:(NSString *)username password:(NSString *)password delegate:(void(^)(NSString *))delegate;

[someReceiver login:yourUsername password:yourPassword delegate:^(NSString *aString)
{
     // This is the block (annonymous function).  Do something with the aString paramter
}];

答案 1 :(得分:2)

它表示block - 它本质上是一个闭包(lambda函数,无论你怎么称呼它) - Apple对C语言的补充。在这种情况下,它返回void并接受NSString对象作为其唯一参数。