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:无法从完成块内部检索数据