-1
我正在测试回调和块功能。ios回调块返回值
我在iOS中使用objective-c。
我写回调方法的名字是“dosomethingProcessWithCompletion”。
dosomethingProcessWithCompletion做些什么,那么它会得到NSMutableDictionary的值,我将使用nsmutabledictionary值来检查某些东西并返回值yes或no。
如果该值是肯定的(------- ------- AAAAA),我需要打破
为(NSInteger的I = 0;我< myAry.count;我++) .. for循环。
并使用tryToCallBlockMethod方法返回yes。
如果该值为否,则for循环将运行到最后一个项目并使用tryToCallBlockMethod方法返回no。
但我不知道如何编写回调返回值。
有没有人可以举手?
我下面的代码:
我AppTool声明:
typedef BOOL(^DoMyProcessCompletion)(NSMutableDictionary *completeresult);
+ (void) dosomethingProcessWithCompletion:(NSURL*)theUrl andUserPsd:(NSString*)psd withCompletion:(DoMyProcessCompletion) completion{
.....
....
..
NSMutableDictionary *resultDic = [NSMutableDictionary dictionary];
if(something == YES){
[resultDic setObject:[NSNumber numberWithBool:YES] forKey:@"resultDicKey"];
[resultDic setObject:myData forKey:@"myDataDicKey"];
}else{
[resultDic setObject:[NSNumber numberWithBool:NO] forKey:@"resultDicKey"];
[resultDic setObject:[NSNull null] forKey:@"myDataDicKey"];
}
completion(resultDic)
}
我的使用和执行功能低于:
-(BOOL) tryToCallBlockMethod{
for(NSInteger i = 0 ; i < myAry.count; i++){
userPsd = myAry[i];
[AppTool dosomethingProcessWithCompletion:[NSURL URLWithString:theUrl] andUserPsd:userPsd withCompletion:^(NSMutableDictionary *completeResult) {
BOOL result = [[completeResult objectForKey:@"resultDicKey"] boolValue];
if(result == YES){
//------- AAAAA-------
//------- if result is YES, will break the for look , and tryToCallBlockMethod will return YES.
return YES;
}else{
//------- BBBBBBB-------
return NO;
}
}];
}
}
非常感谢你。
我想你完全误解了该块的用法。 Block通常用于异步方式,异步进程如何打破循环?如果你想要一些检查可能会打破循环,你不应该使用块,只需使用正常的同步过程。 –