我有一个可变参数函数,它在第一个参数上运行一些代码,然后在传递参数后运行NSString
initWithFormat:arguments:
。
+ (NSString *)updatedString:(NSString *)mainString, ...
{
// Some code run on mainString here, outputs finalString
// add format arguments to the final string
va_list args;
va_start(args, mainString);
NSString *formattedString = [[NSString alloc] initWithFormat:finalString arguments:args];
va_end(args);
return formattedString;
}
编辑:这个想法是在mainString上运行的代码使用正则表达式来查找和替换文本中的变量。所以说输出(finalString
)等于"Hello World %@ blah blah %@"
,那么它将使用参数来替换%@
符号。问题是,在解析字符串之前,我不知道解析后的字符串是否包含%@
个符号。
所以,我需要检查是否有任何额外的参数,如果没有,我不想运行initiWithFormat
部分。
有没有办法检查args
是否先存在?
答案 0 :(得分:3)
没有。在C / Objective-C中,一个被称为可变参数的函数完全不知道调用者传递的参数的数量和类型。它必须基于其他信息(例如,格式参数,它们匹配格式字符串中的格式说明符;或者对象初始化Cocoa集合,列表以nil
终止)和信任,以某种方式解决它调用者正确遵循惯例。