使用格式的NSString定义方法

时间:2012-10-29 14:51:14

标签: objective-c ios

如何在自己的类中定义一个接受带格式的NSString的方法?

我看到使用它的几个不同的东西,如NSLog[NSPredicate predicateWithFormat:(NSString *)predicateFormat, ...],当然还有[NSString stringWithFormat:(NSString *)format, ...]

此外,在头文件中,NSLog和stringWithFormat在声明后具有以下内容: NS_FORMAT_FUNCTION(1,2)。谷歌搜索告诉我这意味着什么并没什么帮助。

显然,省略号是格式参数,但我不知道如何在方法本身中处理它们。

2 个答案:

答案 0 :(得分:7)

您需要使用一些C代码:

- (void)someMethod:(NSString *)format,... {
    va_list argList;
    va_start(argList, format);
    while (format) {
        // do something with format which now has next argument value
        format = va_arg(argList, id);
    }
    va_end(argList);
}

如果您只是想将这些内容传递给字符串格式,那么这可以:

- (void)someMethod:(NSString *)format,... {
    va_list args;
    va_start(args, format);
    NSString *msg = [[NSString alloc] initWithFormat:format arguments:args];
    va_end(args);
}

答案 1 :(得分:2)

您正在寻找具有可变数量参数的Objective-C方法。以下是它的完成方式:

标题中的声明:

- (void)setContentByAppendingStrings:(NSString *)firstString, ... 
   NS_REQUIRES_NIL_TERMINATION;

实现:

- (void)setContentByAppendingStrings:(NSString *)firstArg, ...
{
    NSMutableString *newContentString = [NSMutableString string];

    va_list args;
    va_start(args, firstArg);
    for (NSString *arg = firstArg; arg != nil; arg = va_arg(args, NSString*))
    {
        [newContentString appendString:arg];
    }
    va_end(args);

    contents = newContentString;
}

来源:Cocoa With Love