Сравнение строк в Objective-C

93

В настоящее время у меня настроен веб-сервер, с которым я общаюсь через SOAP с моим приложением для iPhone. Я возвращаю строку, содержащую GUID, и когда пытаюсь сравнить ее с другой строкой, получаю странные результаты.

Почему это не сработает? Наверняка две струны совпадают?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;
ingh.am
источник
1
Этот вопрос сейчас практически бесполезен, потому что исчез скриншот. Вот почему код следует копировать в вопросы.
ао
Думаю, скриншот был ошибкой, но ответ был дан примерно 2 года назад!
ingh.am
1
Но ни один будущий читатель не увидит ошибку или код, который вы использовали, чтобы узнать, совпадает ли он с их собственным, а это значит, что этот вопрос никому не поможет.
ао
Буду искать изображение. Я понимаю, что это как справочная база для других вопросов, но закрывать ее сейчас бессмысленно.
ingh.am
2
Почему этот вопрос закрыт? Совершенно правильный вопрос!
ibz

Ответы:

216

Используйте этот -isEqualToString:метод для сравнения значений двух строк. Использование ==оператора C просто сравнивает адреса объектов.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}
Jlehr
источник
2
А! Большое вам спасибо. Почувствуйте себя дураком на этом!
ingh.am 07
3
Я предполагаю, что в ObjectiveC ++ вы могли бы создать перегрузку оператора, чтобы дать вам синтаксически сладкую возможность использовать ==, но ни один здравомыслящий программист на C этого не сделает, потому что == используется только для проверки идентичности в объективных объектах C.
Уоррен П.
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.
}
mxg
источник
1
Я думаю, это должно быть: ([сравнение категорий: @ Параметры "Some String": NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL
9
Будьте осторожны с функцией «compare», потому что, если строка (в данном случае «category») равна нулю, compare всегда будет возвращать NSOrderedSame.
nh32rg
Отличный момент @ nh32rg !! +1 за это! Есть ли у isEqualToString такая же проблема?
badweasel
4

Вы можете сравнить строку с функциями ниже.

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
Викрам Поте
источник