Сравнение строк в какао - PullRequest
18 голосов
/ 19 мая 2009

Я пробовал:

- (NSString*) generateString
{
    NSString* stringToReturn = @"thisString";
    return stringToReturn;
}

- (void) otherMethod
{
    NSString *returnedString = [self generateString];
    if (returnedString == @"thisString")
    { // Do this }
    else if (returnedString == @"thatString")
    { // Do that }
}

Что никогда не совпадает.

Я тогда попробовал

if ([returnedString compare:@"thisString"] == 1)

Но метод сравнения всегда возвращает 1 для меня, даже при сравнении с другой строкой.

Как правильно это сделать и какого результата мне ожидать?

Ответы [ 5 ]

45 голосов
/ 19 мая 2009

Прежде всего, вы используете оператор == для сравнения двух указателей на объекты (типа NSString *). Это возвращает true, когда указатели совпадают, а не когда строки имеют одинаковое содержимое. Если вы хотите сравнить, являются ли две строки одинаковыми, вы должны использовать isEqualToString: или isEqual: (isEqual: является более общим, поскольку он работает для всех типов объектов).

Во-вторых, compare: возвращает 0 (NSOrderSame), когда они совпадают, и 1 (NSOrderedDescending), когда первое больше, чем второе. Таким образом, на самом деле он возвращает 1 только , когда они различаются (в частности, когда первое больше второго).

12 голосов
/ 19 мая 2009
[returnedString isEqualToString: @"thisString"]
5 голосов
/ 17 июня 2009
if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");
5 голосов
/ 19 мая 2009

При сравнении двух одинаковых строк compare вернет NSOrderedSame, что равно 0. Он также может вернуть NSOrderedAscending, -1 и NSOrderedDescending, 1.

Вы можете использовать isEqualToString, который возвращает ДА ​​или НЕТ.

2 голосов
/ 19 мая 2009

Оператор == применительно к объектам проверяет, равны ли указатели.

Вы должны использовать метод -compare или одного из его спутников - compare:options: - compare:options:range: или -compare:options:range:locale:, которые возвращают NSComparisonResult (NSOrderAscending, NSOrderSame, NSOrderDescending)

Если вам просто нужно сравнение на равенство, вы можете использовать -isEqualToString:, который возвращает значение BOOL.

...