2009-08-30 4 views
31

एक NSString विधि -characterAtIndex: है जो एक unichar देता है।यूनिचर और एनएसएसटींग - ये कैसे परिवर्तनीय हैं?

  • (unichar) characterAtIndex: (NSUInteger) सूचकांक

मुझे आश्चर्य है कि अगर यह unichar, जो स्पष्ट रूप से एक NSString नहीं है, के लिए एक NSString में बदला जा सकता या feeded एक NSString को उद्देश्यों की तुलना?

और: क्या NSString आंतरिक रूप से केवल अनइचर आइटमों की एक श्रृंखला शामिल है?

उत्तर

63

आपके पास दो विकल्प:

NSString *otherString = @"TestString"; 

NSString *str = [NSString stringWithUnichar:[otherString characterAtIndex:1]]; 

से कॉल करने या यदि आप बस सीधे इस तरह जा सकते हैं

@interface NSString (MNNSStringWithUnichar) 
+ (NSString *) stringWithUnichar: (unichar) value; 
@end 


@implementation NSString (MNNSStringWithUnichar) 

+ (NSString *) stringWithUnichar:(unichar) value { 
    NSString *str = [NSString stringWithFormat: @"%C", value]; 
    return str; 
} 

@end 

तब:

पहले एक वर्ग NSString करने के लिए एक stringWithUnichar विधि जोड़ने है
NSString *str = [NSString stringWithFormat:@"%C",[otherString characterAtIndex:1]]; 

यदि आप बार-बार इसका उपयोग करना चाहते हैं तो श्रेणी चुनें, या यदि आपको केवल इसे एक बार करना है स्ट्रिंग WithFormat उदाहरण का उपयोग करें !!

नहीं NSString के आंतरिक भागों के बारे में निश्चित करने के लिए है, लेकिन मुझे लगता है कि चाहते हैं यह शायद लपेटकर है एक

unichar * 

या unichars की एक सरणी (एक सी चार *) की तरह

एक unichar बस है एक 16 बिट मान जो किसी चरित्र को स्टोर करने के लिए उपयोग किया जाता है। एक हस्ताक्षरित चार के विपरीत जो केवल 8 बिट्स है, यह 0-255 से अधिक हो सकता है, इसलिए यह यूनिकोड वर्ण भी रख सकता है, जो कि 16 बिट हैं। एक NSString एक (के समूह) वर्ग [es] कि unichars

संपादित की एक सरणी शामिल है

यहाँ लोग क्या सोचते हैं एक NSString है के बारे में कुछ लेख:

http://cocoawithlove.com/2008/08/string-philosophies-char-arrays.html

http://www.reddit.com/r/programming/comments/6v1yw/string_philosophies_char_arrays_stdstring_and/

आशा है कि मदद करता है!

+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length; 

तो बस का उपयोग कर:

yourString = [NSString stringWithCharacters: &yourChar length: 1]; 

yourChar पैरामीटर एक सूचक होना चाहिए

+0

आप "टेस्टस्ट्रिंग" से पहले @ भूल गए थे? – newacct

+0

मुझे पता था कि कुछ ठीक नहीं दिख रहा था ... धन्यवाद! – micmoo

4

एक अन्य विकल्प वर्ग विधि का उपयोग करने के लिए है।

2

एनएसएसटींग वास्तव में एक वर्ग क्लस्टर है।इसका मतलब सामग्री और आकार के आधार पर प्रदर्शन सहित विभिन्न कारणों से है और जब आप एनएसएसटींग बनाते हैं तो सीएफस्ट्रिंग को टोल फ्री ब्रिजिंग का समर्थन करने के लिए आपको वास्तव में कई निजी वर्गों में से एक मिल सकता है जो YES को वापस भेजते हैं IKindOf: जब आप इसे पूछते हैं कि यह एक एनएसएसटींग है और यह एनएसएसटींग कक्षा में सभी विधियों का जवाब देगा। यह एक प्रोटोकॉल की तरह है लेकिन सभी ऑब्जेक्ट्स सार्वजनिक एपीआई में कहेंगे और करेंगे और एनएसएसटींग करेंगे।

एनएसएसटींग और सीएफस्ट्रिंग के लिए प्रलेखन राज्यों के रूप में यह अवधारणात्मक रूप से यूटीएफ 16 यूनिचर की एक सरणी है, यह एक अलग आंतरिक प्रतिनिधित्व का उपयोग कर सकता है जहां यह कार्यान्वयन के लिए एक लाभ प्रस्तुत करता है। आम तौर पर प्रदर्शन कभी-कभी स्मृति आकार। लेकिन आप इस पर भरोसा कर सकते हैं जब आप पूछे जाने वाले या कुछ और एपीआई वादे करते हैं तो आपको अनइचर की सी सरणी मिलती है।

परिपक्व होने में काफी समय लगता है और लगभग हर रिलीज में आंतरिक रूप से tweaked है।

संक्षेप में आप इसके बारे में सोच सकते हैं कि यूटीएफ 16 यूनिचर की एक सरणी द्वारा समर्थित किया जा रहा है जो मोटे तौर पर यूनिकोड मानक में लॉजिकल स्ट्रिंग के वर्णन से मेल खाता है। लेकिन ध्यान में रखना यह बात है कि आपको वास्तव में चिंता करने की आवश्यकता नहीं है कि अंदर क्या है, केवल यह बताता है कि आप अंदर क्या हैं।

यह यूनिकोड के सर्वोत्तम कार्यान्वयन में से एक है। यदि आप काम करने के तरीके की एक पूर्ण तस्वीर चाहते हैं तो आप opensource.apple.com पर सीएफस्ट्रिंग के स्रोत (अधिकतर) को देख सकते हैं। यह सी और कोर फाउंडेशन (ऑब्जेक्ट ओरिएंटेड सी) और काफी स्टाइलिज्ड है, इसलिए इसकी अपेक्षा न करें इसे सब एक बार में समझें।

एनएसएसटींग और सीएफस्ट्रिंग में यूनिकार से लौटने और बनाने के तरीके हैं। ज्यादातर लोगों को उन अधिकांश समय की आवश्यकता नहीं होनी चाहिए। यदि आप करते हैं, तो सावधान रहें, बहुत कुछ पढ़ने और बेवकूफ़ गलतियों को तैयार करने के लिए तैयार रहें। यूनिकोड एक बड़ा विषय है। इसे सही तरीके से संभालना उस स्तर पर एक विज्ञान और एक कला है। यह एनएसएसटींग के कारणों में से एक है। यह बहुत सी कठोर चीजें संभालता है, इसलिए जब तक आप चाहें या नहीं चाहते हैं, तब तक आपको अक्सर ऐसा करने की ज़रूरत नहीं है।