2012-07-12 12 views
23

जब मैं स्ट्रिंग स्वरूपण का उपयोग कर रहा हूं, तो क्या मैं इसे फिर से पास किए बिना एक पैरामीटर एकाधिक बार एक्सेस कर सकता हूं?"एनएसएसटींग स्ट्रिंगविथफॉर्मैट:" - एक ही पैरामीटर को कई बार एक्सेस करें?

उदाहरण:

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]; 

वहाँ लेखन के बिना फिर से पहले पैरामीटर पहुंचने का एक तरीका फिर से है "parameter1,"?

उत्तर

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

ध्यान दें कि प्रारूप स्ट्रिंग में, आप सभी तर्क तर्क सूची में प्रदान का उल्लेख करने की जरूरत है। जैसे। निम्न कोड रनटाइम पर एक बग का कारण बनता है, क्योंकि पहले स्ट्रिंगल तर्क को प्रारूप स्ट्रिंग में उपयोग नहीं किया जाता है: '[NSString stringWithFormat: @"% 2 $ @ ", @" bar ", @" foo "]' - http देखें: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-wwizzled-to-allow-missing-format-numbered-args – mrb

+1

@mrb दाएं। यह चर में तर्क ('...') कार्यान्वयन का दुष्प्रभाव है (एक बग नहीं)। यदि आप फ़ॉर्मेटिंग फ़ंक्शन को नहीं बताते हैं कि तर्क किस प्रकार है (इसे कम से कम एक बार प्रतिबिंबित करके), इसके बाद किसी को सही तरीके से ढूंढने का कोई तरीका नहीं है। – hamstergene

+0

मैं इसे predicateWithFormat के साथ कोशिश करता हूं लेकिन काम नहीं कर रहा हूं। भविष्यवाणी के लिए तर्क स्थिति का उपयोग कैसे कर सकते हैं? – Add080bbA

संबंधित मुद्दे