2012-07-12 59 views
23

当我使用字符串格式时,我可以多次访问一个参数而不再传递一次吗?“NSString stringWithFormat:” - 多次访问相同的参数?

例子:

NSString *parameter1 = @"1"; 
NSString *parameter2 = @"2"; 

NSString *myString; 
myString = [NSString stringWithFormat:@"I want to print parameter1 here: %@, parameter2 here: %@ and now access parameter1 again: %@ _without_ passing it again.",parameter1, parameter2, parameter1]; 

有没有不用写再次访问的第一个参数的方式”,参数1" 再次?

回答

54

是,使用定位参数

// prints: foo bar foo bar 
NSLog(@"%@", [NSString stringWithFormat:@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"]); 

// NSLog supports it too 
NSLog(@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"); 
+5

注意格式字符串,你需要参考的参数列表中提供的所有参数。例如。下面的代码在运行时会导致一个bug,因为格式化字符串中第一个位置参数是未使用的:'[NSString stringWithFormat:@“%2 $ @”,@“bar”,@“foo”]' - 请参阅http: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-swizzled-to-allow-missing-format-numbered-args – mrb 2012-07-12 14:44:47

+1

@mrb对。这是C中可变参数('...')实现的副作用(不是bug)。如果你没有告诉格式化函数什么类型的参数(通过引用它至少一次),没有办法在它之后正确地找到它们。 – hamstergene 2012-07-12 14:49:05

+0

我用predicateWithFormat尝试它,但不工作。如何使用谓词的参数位置? – Add080bbA 2015-07-14 16:28:14