Ich persönlich hasse NSNotFound
es wirklich, aber ich verstehe seine Notwendigkeit.
Einige Leute verstehen jedoch möglicherweise nicht die Komplexität des Vergleichs mit NSNotFound
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, wenn otherString = nil
dieser Code abstürzt. Ein einfacher Test wäre:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
führt zu !! 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");
wird beides ergeben
does string contains string - YES
Welches ist eindeutig nicht das, was Sie wollen.
Die bessere Lösung, von der ich glaube, dass sie funktioniert, besteht darin, die Tatsache zu verwenden, dass rangeOfString die Länge 0 zurückgibt. Ein zuverlässigerer Code ist also 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);
}
welches für die Fälle 1 und 2 zurückkehren wird
does string contains string - NO
Das sind meine 2 Cent ;-)
Bitte überprüfen Sie meine Liste für weitere hilfreiche Codes.