解析Objective-C printf格式字符串?

Hea*_*ers 10 c printf objective-c

我想获得一个NSString内置的成员范围+[NSString stringWithFormat:].解析objective-c格式字符串的最佳方法是什么?因为,我不能只使用C格式的字符串解析器%@.我还需要确保它支持的格式排序:%1$d,%2$@,等.

例如,使用构建的字符串[NSString stringWithFormat:@"foo %2$@ bar %1$@", @"Heath", @"Borders"],我理想地喜欢以下内容NSArray:@[NSMakeRange(15, 5), NSMakeRange(4, 6)].第一个数组对象对应于格式字符串中的第一个数据元素,第二个数组元素对应于第二个数据元素等.

在这种情况下,API会看起来像+ (NSString *) stringWithFormatRanges:(NSArray **)outFormatRanges withFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);它会返回一个NSString只是喜欢+[NSString stringWithFormat:],但它也将返回一个NSArray与NSRange各种格式的数据元素的秒.

- 编辑 -

鉴于这个问题已经有3年了,我现在对这个C-only实现感到满意.

ren*_*sch 5

几年前我对此进行了研究.如果我理解你的问题,就没有简单的方法可以从C或Cocoa格式字符串的格式字符串中获取AST.

我写了NSXMLElement + elementWithXMLFormat,它允许非转义插入NSXMLElements到一个带有特殊%%%@格式代码的格式字符串,这需要扩展Cocoa的格式.我的技术可能对您有所帮助:

https://github.com/rentzsch/nsxmlelement-elementwithxmlformat/blob/937b54b2a830a8fbbd72d6bc5e48bafd495ddcbd/NSXMLElement%2BelementWithXMLFormat.m#L41

我提取和NUL分隔格式代码,传统运行然后重新组装.