Cocoa中的变量参数列表

sam*_*mir 2 cocoa objective-c

我有这样的代码:

- (NSArray *)executeSqlWithParameters:(NSString *)sql, ...
{

    va_list argumentList;
    va_start(argumentList, sql);

    NSMutableArray *arguments = [NSMutableArray array];

    id argument;
    while(argument == va_arg(argumentList, id))
    {
        [arguments addObject:argument];
    }
    va_end(argumentList);

    NSLog(@"arguments %@",arguments); // here i have an empty array

    return [self executeSql:sql withParameters:arguments];

}
Run Code Online (Sandbox Code Playgroud)

我这样称呼这个方法:

NSArray *results = [self.dataBaseManager executeSqlWithParameters:@"SELECT * from InfoTable number = ?",[NSNumber numberWithInt:5], nil];
Run Code Online (Sandbox Code Playgroud)

但是当我在executeSqlWithParameters方法中记录arguments数组时,它是emty.我做错了什么?谢谢

Mik*_*rty 7

你在这一行上只有一个小错字:

while(argument == va_arg(argumentList, id))
Run Code Online (Sandbox Code Playgroud)

你想要的是:

while(argument = va_arg(argumentList, id))
Run Code Online (Sandbox Code Playgroud)

或者等效地,避免编译器警告:

while ((argument = va_arg(argumentList, id)) != nil)
Run Code Online (Sandbox Code Playgroud)