有时候我们在使用函数中,函数内部的很多步骤是重复书写的,同一个函数的某些环节的调用不同函数时,可以直接传(SEL)作为参数,但当某个函数的参数是block时,可以使用下面的定义
sel:待执行方法
arguments:函数对应参数
- (void)invocationSEL:(SEL)sel arguments:(NSArray*)arguments{
NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:sel];
NSInvocation*invocation = [NSInvocationinvocationWithMethodSignature:signature];
[invocationsetTarget:self];
[invocationsetSelector:sel];
for(inti =0; i< arguments.count; i++) {
idargument = [argumentswim_objAtIndex:i];
[invocationsetArgument:&argumentatIndex:1+i];
}
[invocationinvoke];
}
eg:
typedef void(^handlerBlock)(NSArray*__nullable array,NSError*__nullable error);
handlerBlock handler = ^(NSArray*__nullable array,NSError*__nullable error){
};
[self invocationSEL:sel arguments:@[array,handler]];
网友评论