Objective-C의 문자열 비교


92

현재 SOAP를 통해 iPhone 앱과 통신하는 웹 서버가 설정되어 있습니다. GUID가 포함 된 문자열을 반환하고 있는데 이것을 다른 문자열과 비교하려고하면 이상한 결과가 나타납니다.

왜 이것이 발사되지 않습니까? 확실히 두 문자열이 일치합니까?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
스크린 샷이 사라졌기 때문에이 질문은 이제 거의 쓸모가 없습니다. 이것이 코드를 질문에 복사하여 붙여 넣어야하는 이유입니다.
jscs

스크린 샷은 제 생각에 오류 였지만 대답은 2 년 전처럼 주어졌습니다!
ingh.am

1
그러나 미래의 독자는 자신의 것과 동일한 지 알기 위해 사용했던 오류 또는 코드를 볼 수 없으므로이 질문은 다른 사람에게 도움이 될 수 없습니다.
jscs

이미지를 찾아 보겠습니다. 이것은 다른 질문에 대한 참조 기반과 같지만 지금 종료하는 것은 약간 무의미합니다.
ingh.am

2
이 질문이 종결 된 이유는 무엇입니까? 완벽하게 유효한 질문입니다!
ibz 2013-08-16

답변:


214

-isEqualToString:메서드를 사용하여 두 문자열의 값을 비교합니다. C ==연산자를 사용하면 단순히 객체의 주소를 비교합니다.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
아! 대단히 감사합니다. 이것에 약간 바보 같은 느낌!
ingh.am 2010

3
내 생각 엔 ObjectiveC ++에서 ==를 사용할 수있는 구문 론적 기능을 제공하기 위해 연산자 오버로드를 만들 수 있지만 정상적인 객관적인 C 프로그래머는이를 수행하지 않을 것입니다. ==는 객관적인 C 객체의 ID 검사에만 사용되기 때문입니다.
Warren P

48

필요한 항목에 따라 대 / 소문자를 구분하거나 구분하지 않는 비교를 사용할 수 있습니다. 대소 문자 구분은 다음과 같습니다.

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

대소 문자를 구분하지 않는 것은 다음과 같습니다.

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
나는 그것이해야한다고 생각 : ([카테고리 비교 : @ "일부 문자열"옵션 : NSCaseInsensitiveSearch] == NSOrderedSame를)
JaakL

9
문자열 (이 경우 "category")이 nil이면 compare는 항상 NSOrderedSame을 반환하므로 "compare"함수에주의하십시오.
nh32rg

@ nh32rg 대단한 포인트입니다 !! +1! isEqualToString에도 같은 문제가 있습니까?
badweasel 2014-08-28

5

아래 함수와 문자열을 비교할 수 있습니다.

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.