Şahsen nefret ediyorum NSNotFound
ama gerekliliğini anlıyorum.
Ancak bazı insanlar NSNotFound ile karşılaştırmanın karmaşıklığını anlamayabilir
Örneğin, bu kod:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
sorunları var:
1) Açıkçası otherString = nil
bu kod çökerse. basit bir test:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
sonuçları !! KAZA !!
2) objektif-c'de yeni olan biri için bu kadar belirgin olmayan şey, aynı kodun ne zaman çökmeyeceği string = nil
. Örneğin, bu kod:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
ve bu kod:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
ikisi de sonuçlanacak
does string contains string - YES
Hangi açıkça ne istediğinizi DEĞİLDİR.
Bu yüzden çalışır inanıyorum daha iyi bir çözüm, o zaman daha iyi, daha güvenilir bir kod bu rangeOfString 0 uzunluğu döndürüyor gerçeğini kullanmaktır:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
YA DA SADECE:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
1 ve 2 numaralı davalar için geri dönecek
does string contains string - NO
Bu benim 2 sentim ;-)
Daha yararlı kod için lütfen Gist'ime göz atın .