2009-05-19 19 views
17

मैंने कोशिश की है:कोको में स्ट्रिंग की तुलना करना

- (NSString*) generateString 
{ 
    NSString* stringToReturn = @"thisString"; 
    return stringToReturn; 
} 

- (void) otherMethod 
{ 
    NSString *returnedString = [self generateString]; 
    if (returnedString == @"thisString") 
    { // Do this } 
    else if (returnedString == @"thatString") 
    { // Do that } 
} 

जो कभी मेल नहीं खाता है।

मैंने फिर

if ([returnedString compare:@"thisString"] == 1) 

की कोशिश की है लेकिन एक अलग स्ट्रिंग के साथ तुलना करते समय भी तुलना विधि हमेशा मेरे लिए 1 लौटाती है।

ऐसा करने का सही तरीका क्या है, और मुझे किस परिणाम की उम्मीद करनी चाहिए?

उत्तर

45

सबसे पहले, आप दो ऑब्जेक्ट पॉइंटर्स की तुलना करने के लिए == ऑपरेटर का उपयोग कर रहे हैं (प्रकार NSString *)। तो जब पॉइंटर्स समान होते हैं तो यह सच होता है, न कि तारों की एक ही सामग्री होती है। यदि आप तुलना करना चाहते हैं कि दो तार समान हैं, तो आपको isEqualToString: या isEqual: (isEqual: अधिक सामान्य है क्योंकि यह सभी प्रकार की वस्तुओं के लिए काम करता है) का उपयोग करना चाहिए।

दूसरा, compare: रिटर्न 0 (NSOrderSame) जब वे एक ही हैं, और 1 (NSOrderedDescending) जब प्रथम, द्वितीय से अधिक है। तो वास्तव में यह 1 केवल लौटाता है जब वे अलग होते हैं (विशेष रूप से, जब पहली बार दूसरे से अधिक होता है)।

+4

तकनीकी तौर पर आप NSStrings तुलना कर रहे हैं आप -isEqualToString उपयोग करना चाहिए: क्योंकि उस विधि मामले में जहां तर्क भी एक NSString वस्तु है के लिए अनुकूलित है। –

12
[returnedString isEqualToString: @"thisString"] 
5

जब दो समान तार compare की तुलना NSOrderedSame वापस आ जाएगी, जो है 0. यह भी NSOrderedAscending, -1, और NSOrderedDescending लौट सकते हैं, 1.

आप जो हाँ या रिटर्न नहीं isEqualToString उपयोग करने के लिए पसंद कर सकते हैं ।

2

== ऑपरेटर ऑब्जेक्ट्स पर लागू होने पर जांच करता है कि पॉइंटर्स बराबर हैं या नहीं। compare:options: - - compare:options:range: या -compare:options:range:locale: जो लौट एक NSComparisonResult (NSOrderAscending, NSOrderSame, NSOrderDescending)

तुम सिर्फ समानता तुलना की जरूरत है, तो आप -isEqualToString: जो एक रिटर्न का उपयोग कर सकते

आप -compare विधि या उसके साथियों में से एक का उपयोग करने के BOOL मूल्य।

5
if ([returnedString isEqualToString:@"thisString"]) 
    NSLog(@"Equal"); 
else 
    NSLog(@"Not Equal"); 
संबंधित मुद्दे