在NSString中保存字符串格式说明符(%@,%d等)以供将来占位符使用?

时间:2012-06-01 00:33:16

标签: iphone objective-c macos cocoa

我有一个长字符串,我想从URL检索并存储在应用程序启动时。稍后,我想在单个字符串中插入单个值。

我想做这样的事情:

NSString *numberLine = @"1 %@ 3 %@ 5 %@";

//... (later) ...

NSString *final = [NSString stringWithFormat:numberLine, @"two", @"four", @"six"]; 

NSLog(@"%@", final); //Should output "1 two 3 four 5 six"

我希望将@"two"插入之前保存到%@的占位符numberLine

有没有一种很好的方法来完成这样的事情?

到目前为止,我唯一的想法就是做一些事情:

NSString *script = @"width = PLACEHOLDERpx";
script = [script stringByReplacingOccurrencesOfString:@"PLACEHOLDER" withString:@"12"];

1 个答案:

答案 0 :(得分:4)

您所描述的是一个模板。您希望将占位符保留在将填充数据的字符串中。虽然你可以通过字符串使用%@和%d,因为字符串变得越来越复杂。您可能希望将Mustache等模板库用于Objective-C。这将让你写下这样的表达式:

Hello {{SomeVariable}}

您所要做的就是传递一个NSDictionary,其中包含与您要渲染的数据相对应的键。因此,对于上面的示例,您可以执行以下操作:

NSString *result = [GRMustacheTemplate renderObject:[NSDictionary dictionaryWithObject:@"World" forKey:@"SomeVariable"];
                                         fromString:@"Hello {{SomeVariable}}"
                                              error:NULL];

这将生成result字符串Hello World