সুতরাং ব্যক্তিগতভাবে আমি সত্যিই ঘৃণা করি 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");
ফলাফল স্বরূপ !! ক্রাশ !!
২) অবজেক্ট-সি-তে নতুন কারও কাছে এতটা স্পষ্ট নয় যে একই কোডটি ক্র্যাশ হবে না 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 সেন্ট ;-)
আরও সহায়ক কোডের জন্য দয়া করে আমার গিস্টটি দেখুন।