EDIT , , , ?
enum CompletionResult { Fail, Success };
@interface Test : NSObject
@property ( nonatomic, readonly ) dispatch_queue_t q ;
@end
@implementation Test
-(dispatch_queue_t)q
{
return dispatch_get_main_queue() ;
}
-(void)method1WithSuccessBlock:(void(^)(NSDictionary * dict))successBlock failureBlock:(void(^)(void))failBlock
{
}
-(void)method2WithSuccessBlock:(void(^)(NSDictionary * dict))successBlock failureBlock:(void(^)(void))failBlock
{
}
-(void)test:(void(^)(enum CompletionResult))block
{
__block BOOL performAsync2 = NO ;
void (^successBlock)(NSDictionary * dict) = ^(NSDictionary * dict){
NSString * value = dict[@"someKey"] ;
if ( [ value isEqualToString:A ] )
{
}
else if ( [ value isEqualToString:B ])
{
}
else if ( [ value isEqualToString:C ] )
{
performAsync2 = YES ;
}
if ( !performAsync2 && block )
{
block( Success ) ;
}
};
void (^failBlock)() = ^{
if ( block ) { block( Fail ) ; }
};
dispatch_sync( self.q, ^{ [ self method1WithSuccessBlock:successBlock failureBlock:failBlock ] } ) ;
if ( performAsync2 )
{
dispatch_sync( self.q, ^{ [ self method2WithSuccessBlock:successBlock failureBlock:failBlock ] } ) ;
}
}
@end
- ?
@interface Test : NSObject
@property ( nonatomic, readonly ) dispatch_queue_t q ;
@end
@implementation Test
-(dispatch_queue_t)q
{
return dispatch_get_main_queue() ;
}
-(BOOL)method1
{
}
-(BOOL)method2
{
}
-(void)test:(void(^)(enum CompletionResult))block
{
__block BOOL didSucceed = NO ;
dispatch_sync( self.q, ^{ didSucceed = [ self method1 ] ; }) ;
if ( !didSucceed )
{
if ( block ) { block( Fail ) ; }
return ;
}
dispatch_sync( self.q, ^{ didSucceed = [ self method2 ] ; }) ;
if ( !didSucceed )
{
if ( block ) { block( Fail ) ; }
return ;
}
if ( block ) { block( Success ) ; }
}
@end
async1 async2... . , , , , .