Cocoa - 从另一个variadic方法调用一个可变方法(NSString stringWithFormat调用)

Oli*_*ver 3 cocoa variadic compiler-warnings nsstring categories

我有一个问题,[NSString strigWithFormat:format]因为它返回一个id,我有很多代码,我将NSString var更改为其他个人类型.但编译器并没有阻止我将NSString设置到另一种类型的对象的地方.

所以我写的NSString的类别和我goind来代替我的所有呼叫stringWithFormatmyStringWithFormat.

代码是:

@interface NSString (NSStringPerso)
+ (NSString*) myStringWithFormat:(NSString *)format;
@end



@implementation NSString (NSStringPerso)
+ (NSString*) myStringWithFormat:(NSString *)format {
    return (NSString*)[NSString stringWithFormat:format];
}
@end
Run Code Online (Sandbox Code Playgroud)

编译器告诉我"格式不是字符串文字而没有格式参数".

你有没有办法让这项工作成功?

Ita*_*ber 6

NSString包括从可变参数函数接收参数列表的方法.看看这个示例函数:

void print (NSString *format, ...) {
    va_list arguments;
    va_start(arguments, format);

    NSString *outout = [[NSString alloc] initWithFormat:format arguments:arguments];
    fputs([output UTF8String], stdout);
    [output release];

    va_end(arguments);
}
Run Code Online (Sandbox Code Playgroud)

有些代码是无关紧要的,但关键是NSString *output = [[NSString alloc] initWithformat:format arguments:arguments];.这就是你如何NSString在一个可变参数函数/方法中构造一个.


在您的情况下,您的代码应如下所示:

+ (NSString *)myStringWithFormat:(NSString *)format, ... {
    va_list arguments;
    va_start(arguments, format);

    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arguments];
    va_end(arguments);

    // perform some modifications to formattedString

    return [formattedString autorelease];
}
Run Code Online (Sandbox Code Playgroud)