OC可變參數:
- (void)executeSql:(NSString *)sql,... __attribute__((sentinel)){
NSMutableString *result = [NSMutableString stringWithFormat:@"%@",sql];
va_list params;//定義一個指向個數可變的參數列表指針
va_start(params,sql);//va_start 得到第一個可變參數地址
NSString *arg;
while((arg = va_arg(params, NSString *))){ //va_arg 指向下一個參數地址
if(arg){
[result appendFormat:@" %@",arg];
}
}
va_end(params);//置空
NSLog(@"%@",result);
}
調用: [self executeSql:@"select * from test",@"where" ,@"age =",@"12",nil];
使用__attribute__((sentinel))語法可以告訴編譯器這是一個需要哨兵參數的函數。它的作用就是告訴函數沒有參數了。這也是為什么ObjC中[NSArray arrayWithObjects: ...,nil]最后必須以nil參數結尾的原因
浙公網安備 33010602011771號