您的位置:首页 > 移动开发 > IOS开发

iOS实现能接受格式化字符串的方法

2016-03-21 11:06 507 查看
有时在我们自己的类中提供一个能接受格式化字符串的方法会很方便使用。假设我们要实现的是一个 To Do 应用,它包含一个 Item 类。我们想要提供:
+ (instancetype)itemWithTitleFormat:(NSString *)format, ...


如此我们就可以使用:
Item *item = [Item itemWithFormat:@"Need to buy %@ for %@", food, pet];


这种类型的方法可以接受可变数量的参数,所以被称为可变参数方法。我们必须使用一个定义在stdarg.h里的宏来使用可变参数。上面方法的实现代码可能会像下面这样:
+ (instancetype)itemWithTitleFormat:(NSString *)format, ...;
{
va_list ap;
va_start(ap, format);
NSString *title = [[NSString alloc] initWithFormat:format locale:[NSLocale currentLocale] arguments:ap];
va_end(ap);
return [self itemWithTitle:title];
}


进一步,我们要添加
NS_FORMAT_FUNCTION
到方法的定义里(在头文件中),如下所示:
+ (instancetype)itemWithTitleFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);


NS_FORMAT_FUNCTION
展开为一个方法
__attribute__
,它会告诉编译器在索引1处的参数是一个格式化字符串,而实际参数从索引2开始。这将允许编译器检查格式化字符串而且会像 NSLog() 和 -[NSString stringWithFormat:] 一样输出警告信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: