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

标签 cocoa nsstring compiler-warnings categories variadic

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

所以我正在编写一个 NSString 类别,并且我要将所有对 stringWithFormat 的调用替换为 myStringWithFormat

代码是:

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



@implementation NSString (NSStringPerso)
+ (NSString*) myStringWithFormat:(NSString *)format {
    return (NSString*)[NSString stringWithFormat:format];
}
@end

编译器告诉我“格式不是字符串文字,也没有格式参数”。

你有什么办法可以做到这一点吗?

最佳答案

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

其中一些代码是不相关的,但关键行是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];
}

关于Cocoa - 从另一个可变参数方法调用可变参数方法(NSString stringWithFormat 调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702871/

相关文章:

c++ - 警告 C4003 : not enough actual parameters for macro 'max' - Visual Studio 2010 C++

C++:为用户定义的类型进行转换

iphone - 为什么被调用者返回自动释放的对象而不是返回保留的对象并让调用者释放对象?

cocoa - 更新核心数据中的值

c# - 如何在 iOS 中查找包含@符号的子字符串

ios - 如何获取一个 NSString 中 [...] 内的所有字符串?

c++ - 为什么 clang -Wunused-member-function 不警告未使用的成员函数?

macos - 检测文件/文件夹的删除和添加 cocoa

xcode - 如何使用 Swift (Xcode 6) 在 Cocoa 应用程序中使用 NSMaxXEdge?

objective-c - NSString 属性和自定义初始化