इसलिए व्यक्तिगत रूप से मैं वास्तव में नफरत करता हूं NSNotFound
लेकिन इसकी आवश्यकता को समझता हूं ।
लेकिन कुछ लोग NSNotFound के खिलाफ तुलना करने की जटिलताओं को नहीं समझ सकते हैं
उदाहरण के लिए, यह कोड:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
इसकी समस्याएं हैं:
1) जाहिर है अगर otherString = nil
यह कोड दुर्घटनाग्रस्त हो जाएगा। एक साधारण परीक्षा होगी:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
का परिणाम !! दुर्घटना !!
2) वस्तुनिष्ठ-ग के लिए किसी के लिए क्या इतना स्पष्ट नहीं है कि एक ही कोड दुर्घटनाग्रस्त नहीं होगा string = nil
। उदाहरण के लिए, यह कोड:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
और यह कोड:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
दोनों में परिणाम होगा
does string contains string - YES
जो स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं।
तो मुझे लगता है कि काम करता है कि बेहतर समाधान तथ्य का उपयोग करने के लिए है कि रेंजऑफस्ट्रिंग 0 की लंबाई लौटाता है तो एक बेहतर अधिक विश्वसनीय कोड यह है:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
या केवल:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
जो मामलों 1 और 2 के लिए वापस आ जाएगा
does string contains string - NO
यह मेरा 2 सेंट है ;-)
कृपया अधिक उपयोगी कोड के लिए मेरे जिस्ट की जाँच करें ।