Jadi secara pribadi saya benar-benar benci NSNotFound
tetapi mengerti perlunya.
Tetapi beberapa orang mungkin tidak memahami kompleksitas perbandingan terhadap NSNotFound
Misalnya, kode ini:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
memiliki masalah:
1) Jelas jika otherString = nil
kode ini macet. tes sederhana adalah:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
hasil !! Hancurkan !!
2) Apa yang tidak begitu jelas bagi seseorang yang baru ke tujuan-c adalah bahwa kode yang sama TIDAK akan crash ketika string = nil
. Misalnya, kode ini:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
dan kode ini:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
keduanya akan menghasilkan
does string contains string - YES
Yang jelas BUKAN apa yang Anda inginkan.
Jadi solusi yang lebih baik yang saya percaya berfungsi adalah dengan menggunakan fakta bahwa rangeOfString mengembalikan panjang 0 sehingga kode yang lebih andal lebih baik adalah ini:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
ATAU SIMPLY:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
yang akan untuk kasus 1 dan 2 akan kembali
does string contains string - NO
Itu 2 sen saya ;-)
Silakan periksa Gist saya untuk kode yang lebih bermanfaat.