如何将可变数量的参数"传递"给NSString的+ stringWithFormat:

Zor*_*mic 31 iphone cocoa objective-c variadic-functions nsstring

我想在Objective-C中编写一个函数,例如下面的函数,它接受可变数量的参数,并将这些参数传递给+stringWithFormat:.我知道vsnprintf,但这意味着将NSString'格式'转换为C并返回(并且还意味着转换其中的格式化占位符......).

下面的代码编译,但当然不按我想要的行为:)

NSString *estr(NSString *format, ...) {
    va_list args;
    va_start(args, format);
    NSString *s = [NSString stringWithFormat:format, args];
    va_end(args);
    return s;
}
Run Code Online (Sandbox Code Playgroud)

基本上:是否有方法的va_list友好版本+stringWithFormat:,还是可以写一个?

new*_*cct 47

initWithFormat:参数:

NSString *estr(NSString *format, ...) {
    va_list args;
    va_start(args, format);
    NSString *s = [[[NSString alloc] initWithFormat:format arguments:args] autorelease];
    va_end(args);
    return s;
}
Run Code Online (Sandbox Code Playgroud)

他们似乎没有一个方便的构造函数"stringWith ..."版本

  • 你是对的,他们没有等同的便利方法.几个月前我提交了雷达(#7025084)请求这个确切的事情.如果你想要这个功能,请报告一个错误请求`+ [NSString stringWithFormat:arguments:]`并引用这个雷达号码 - 重复(已经有一个)是开发人员可以做的最好的"投票"他们认为是的问题重要.http://bugreport.apple.com (5认同)
  • Apple不太可能添加一个便利构造函数,相当于现有的-init ...方法的单行包装器.只需将其放在NSString的类别中即可.我一直这样做. (2认同)
  • 就像许多Cocoa brainf*cks一样,即使是最基本的贝壳也可以做到这一点,等等.我发誓,Objective C让我因为像这样的废话而奔向山丘. (2认同)