多个SEL放到函数中的传递
有时候我们需要一次在接口方法中传递多个参数SEL方式的,具体方法可以有两种:
第一种:把SEL放到模型类中,模型类方法数组中,利用数组传递
第二种:在方法中直接传递SEL,我们重点说下这个
接口方法代码如下:
- (void)setEntrySelectors:(SEL)selectors,...NS_REQUIRES_NIL_TERMINATION;
方法的实现:
- (void)setEntrySelectors:(SEL)firstSelector, ...
{
va_list args; //获取SEL的list 的指针
va_start(args, firstSelector); //获取所有的SEL
self.selArray = [NSMutableArray array];
[self.selArray addObject:[selMode createSELMode:firstSelector]]; //SEL 不是id类型的,不能直接放到数组中
SEL curSel = nil;
while ((curSel = va_arg(args, SEL))) { //遍历args 得到每一个SEL,并放到数组中
[self.selArray addObject:[selMode createSELMode:curSel]];
}
va_end(args);
}
selMode的是一个mode类,只是用来盛放SEL转化的,这样才能直接放到数组中转化
@interface selMode : NSObject
@property(nonatomic, readonly) SEL sel;
@property(nonatomic, readonly, weak) NSObject *executeInObj;
+ (selMode *)createSELMode:(SEL)selector;
@end
@implementation selMode
+ (selMode *)createSELMode:(SEL)selector
{
return [[self alloc] initWithSel:selector andWithNSObject:nil];
}
- (id)initWithSel:(SEL)selector andWithNSObject:(NSObject *)object
{
if (self = [super init]) {
_executeInObj = object;
_sel = selector;
}
return self;
}
@end
大工搞成,以后就可以这样子写了,其实就是 va_list 的应用。