그래서 개인적으로 나는 정말 미워 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");
결과 !! 크래시 !!
2) objective-c를 처음 접하는 사람에게는 그렇게 분명하지 않은 것은 언제 같은 코드가 충돌하지 않는다는 것 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 센트입니다. ;-)
더 유용한 코드는 내 요지 를 확인하십시오 .