ඒ නිසා පෞද්ගලිකව මම ඇත්තටම වෛර කරනවා 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");
ප්රති results ල !! ක්රෑෂ් !!
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
එය පැහැදිලිවම ඔබට අවශ්ය දේ නොවේ.
එබැවින් මා විශ්වාස කරන වඩා හොඳ විසඳුම වන්නේ rangeOfString 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 ;-)
වඩාත් ප්රයෝජනවත් කේතය සඳහා කරුණාකර මගේ සාරාංශය බලන්න .