[ios] 대소 문자를 구분하지 않는 비교 NSString

누구나 Objective C에서 대소 문자를 구분하지 않는 비교에 대한 리소스를 알려 줄 수 있습니까? 에 상응하는 방법이없는 것 같습니다str1.equalsIgnoreCase(str2)



답변

if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
  // strings are equal except for possibly case
}

설명서는 검색 및 비교 방법에 있습니다.


답변

 NSString *stringA;
 NSString *stringB;

 if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
     // match
 }

참고 : stringA && 은 ( stringA는) nil다음과 같은 이유로 필요합니다 .

 stringA = nil;
 [stringA caseInsensitiveCompare:stringB] // return 0

그래서 어떻게 NSOrderedSame또한으로 정의된다 0.

다음은 일반적인 함정입니다.

 NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
 if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
     // what happens if "Rank" is not found in standardUserDefaults
 }


답변

대소 문자를 구분하지 않는 것보다 더 많은 제어를 원하는 경우의 대안은 다음과 같습니다.

[someString compare:otherString options:NSCaseInsensitiveSearch];

숫자 검색과 분음 부호는 두 가지 편리한 옵션입니다.


답변

비교하기 전에 항상 같은 경우인지 확인할 수 있습니다.

if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
    // They're equal
}

nil 문자열 비교와 관련하여 matm이 설명 할 수있는 잠재적 인 문제를 피하는 것이 주된 이점입니다. compare:options:메소드 중 하나를 수행하기 전에 문자열이 0이 아닌지 확인 하거나 나처럼 게으르고 각 비교에 대해 새 문자열을 작성하는 추가 비용을 무시할 수 있습니다 (하나만 수행하는 경우 최소 임) 또는 두 가지 비교).


답변

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString


답변

이를위한 새로운 방법. iOS 8

let string: NSString = "Café"
let substring: NSString = "É"

string.localizedCaseInsensitiveContainsString(substring) // true


답변

이 방법을 사용해보십시오

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString