IOS/Objective-C:调用完成块的语法

Posted

技术标签:

【中文标题】IOS/Objective-C:调用完成块的语法【英文标题】:IOS/Objective-C: Syntax for calling completion bloc 【发布时间】:2018-09-24 00:45:33 【问题描述】:

由于某种原因,我似乎无法正确拨打以下电话。

方法签名是:

-(void)getMyBlock: (void (^)(NSString *))completed; // It returns a string.

以下调用它的尝试(以及我尝试过的大约十个其他尝试)不起作用:

[self getMyBlock: (void (^)(NSString*)completed];

【问题讨论】:

【参考方案1】:

这就是你的块方法应该是这样的:

-(void)getMyBlock: (void (^)(NSString * yourString))completed 
    completed(@"HELLO");

这就是你的称呼:

[self getMyBlock:^(NSString *yourString) 
    NSLog(@"%@", yourString);
];

此链接可以帮助您: http://goshdarnblocksyntax.com/

【讨论】:

我当然希望getMyBlock的实现能做的远不止这些,否则就不需要补全块了。 它做得更多——几层方法和服务器调用,但完成的(结果)语法是最后让我感到困惑的问题。【参考方案2】:

您需要为completed 参数提供一个块:

[self getMyBlock:^(NSString *result) 
    // this code is called when the asynchronous code inside getMyBlock is done
];

getMyBlock 方法的实现中的某处代码如下:

- (void)getMyBlock: (void (^)(NSString *))completed 
    // do some asynchronous stuff
    NSString *result = // some result string
    if (completed) 
        completed(result);
    

【讨论】:

以上是关于IOS/Objective-C:调用完成块的语法的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:从完成块中检索 NSArray

IOS/Objective-C:调用另一个类(VC)方法不起作用

服务器调用的完成和错误块的单元测试

iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler:无法从完成块内部检索数据

设备管理(读文件部分)

iOS Objective-C:如何从另一个类调用 Push Segue