Also persönlich hasse ich NSNotFound
wirklich, aber verstehe seine Notwendigkeit.
Aber einige Leute könnten die Komplexitäten des Vergleichs gegen NSNotFound möglicherweise nicht verstehen
Zum Beispiel dieser Code:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
hat seine Probleme:
1) Offensichtlich wird dieser Code abstürzen, wenn otherString = nil
. Ein einfacher Test wäre:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
ergeben !! ABSTURZ !!
2) Was für jemanden, der neu in Objective-C ist, nicht so offensichtlich ist, ist dass derselbe Code NICHT abstürzt, wenn string = nil
. Zum Beispiel dieser Code:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
und dieser Code:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
ergeben beide
does string contains string - YES
Was definitiv NICHT das ist, was du willst.
Also die bessere Lösung, die meiner Meinung nach funktioniert, ist die Tatsache zu nutzen, dass rangeOfString die Länge von 0 zurückgibt. Also ist ein besserer, zuverlässigerer Code folgender:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
ODER EINFACH:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
was in den Fällen 1 und 2 zurückgibt
does string contains string - NO
Das ist mein Beitrag ;-)
Bitte schaue dir mein Gist für weiteren hilfreichen Code an.