Objective c 变量函数:检查参数数

Objective c 变量函数:检查参数数,objective-c,nsstring,variadic-functions,Objective C,Nsstring,Variadic Functions,我有一个变量函数,它在第一个参数上运行一些代码,然后在传入参数后运行NSStringinitWithFormat:arguments: + (NSString *)updatedString:(NSString *)mainString, ... { // Some code run on mainString here, outputs finalString // add format arguments to the final string va_list ar

我有一个变量函数,它在第一个参数上运行一些代码,然后在传入参数后运行
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;
}
EDIT:其思想是,在mainString上运行的代码使用正则表达式来查找和替换文本中的变量。因此,假设输出(
finalString
)等于
“Hello World%@blah blah%@”
,那么它将使用参数替换
%@
符号。问题是,在解析字符串之前,我不知道解析的字符串是否包含
%@
符号

因此,我需要检查是否有额外的参数,如果没有,我不想运行
initiWithFormat
部分



有没有办法先检查
args
是否存在?

否。在C/Objective-C中,被称为变量函数的函数完全不知道调用者传递的参数的数量和类型。它必须根据其他信息(例如,对于格式参数,它们与格式字符串中的格式说明符匹配;或者对于初始化Cocoa集合的对象,列表以
nil
结尾)以某种方式进行计算并且相信调用者正确地遵循了约定。

否。在C/Objective-C中,一个被称为变量函数的函数完全不知道调用者传递的参数的数量和类型。它必须根据其他信息(例如,对于格式参数,它们与格式字符串中的格式说明符匹配;或者对于初始化Cocoa集合的对象,列表以
nil
结尾)以某种方式进行计算并且相信调用者正确地遵循了约定。

否。在C/Objective-C中,一个被称为变量函数的函数完全不知道调用者传递的参数的数量和类型。它必须根据其他信息(例如,对于格式参数,它们与格式字符串中的格式说明符匹配;或者对于初始化Cocoa集合的对象,列表以
nil
结尾)以某种方式进行计算并且相信调用者正确地遵循了约定。

否。在C/Objective-C中,一个被称为变量函数的函数完全不知道调用者传递的参数的数量和类型。它必须根据其他信息(例如,对于格式参数,它们与格式字符串中的格式说明符匹配;或者对于初始化Cocoa集合的对象,列表以
nil
终止)以某种方式进行计算,并相信调用方正确地遵循了约定。

为什么需要检查?只要格式字符串没有格式说明符,调用
initWithFormat
就可以了,即使没有更多的参数。是否有原因不能修改updatedString方法以便显式传递变量参数的数量?请解释您尝试实现的目的。因为现在你的代码看起来完全错了。可能用NSArray参数传递参数更适合你。我已经稍微更新了问题,谢谢。你为什么需要检查?只要格式字符串没有格式说明符,调用
initWithFormat
就可以了,即使没有更多的参数。是否有原因不能修改updatedString方法以便显式传递变量参数的数量?请解释您尝试实现的目的。因为现在你的代码看起来完全错了。可能用NSArray参数传递参数更适合你。我已经稍微更新了问题,谢谢。你为什么需要检查?只要格式字符串没有格式说明符,调用
initWithFormat
就可以了,即使没有更多的参数。是否有原因不能修改updatedString方法以便显式传递变量参数的数量?请解释您尝试实现的目的。因为现在你的代码看起来完全错了。可能用NSArray参数传递参数更适合你。我已经稍微更新了问题,谢谢。你为什么需要检查?只要格式字符串没有格式说明符,调用
initWithFormat
就可以了,即使没有更多的参数。是否有原因不能修改updatedString方法以便显式传递变量参数的数量?请解释您尝试实现的目的。因为现在你的代码看起来完全错了。也许用NSArray参数传递参数更适合你。我稍微更新了问题,谢谢。好的,我理解。我试图“聪明一点”,用与
initWithFormat
相同的方式格式化函数,但我可以轻松地传递一个参数数组。看来我得用这个来代替了。谢谢好的,我明白了。我试图“聪明一点”,用与
initWithFormat
相同的方式格式化函数,但我可以轻松地传递一个参数数组。看来我得用这个来代替了。谢谢好的,我明白了。我试图“聪明一点”,用与
initWithFormat
相同的方式格式化函数,但我可以轻松地传递一个参数数组。看来我得用这个来代替了。谢谢好的,我明白了。我试图“聪明一点”,用与
initWithFormat
相同的方式格式化函数,但我可以轻松地传递一个参数数组。看来我得用这个来代替了。谢谢