Oli*_*ver 3 cocoa variadic compiler-warnings nsstring categories
我有一个问题,[NSString strigWithFormat:format]因为它返回一个id,我有很多代码,我将NSString var更改为其他个人类型.但编译器并没有阻止我将NSString设置到另一种类型的对象的地方.
所以我写的NSString的类别和我goind来代替我的所有呼叫stringWithFormat至myStringWithFormat.
代码是:
@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)
编译器告诉我"格式不是字符串文字而没有格式参数".
你有没有办法让这项工作成功?
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)