4

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

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

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

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

4

2 回答 2

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);
}

并且可以将 args 转发到NSString如下:

- (void)someMethod:(NSString *)format,... {
    va_list args;
    va_start(args, format);
    NSString *msg = [[NSString alloc] initWithFormat:format arguments:args];
    va_end(args);
}
于 2012-10-29T14:56:53.500 回答
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;
}

资料来源:可可与爱

于 2012-10-29T14:56:37.143 回答