2017-06-01 96 views
-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; 
      } 
     }]; 
    } 
} 

非常感谢你。

+0

我想你完全误解了该块的用法。 Block通常用于异步方式,异步进程如何打破循环?如果你想要一些检查可能会打破循环,你不应该使用块,只需使用正常的同步过程。 –

回答

0

当您在功能中使用时,您需要返回布尔值。

-(void) tryToCallBlockMethod:(void(^)(BOOL isResult))callback{ 
     if(result == YES){ 
        callback(YES) 
       return YES; 
      }else{ 
        callback(NO) 

      } 
}