如何在自己的类中定义一个接受带格式的NSString的方法?
我看到使用它的几个不同的东西,如NSLog
,[NSPredicate predicateWithFormat:(NSString *)predicateFormat, ...]
,当然还有[NSString stringWithFormat:(NSString *)format, ...]
此外,在头文件中,NSLog和stringWithFormat在声明后具有以下内容:
NS_FORMAT_FUNCTION(1,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。