Подтвердить что ты не робот

Сравнение строк в Cocoa

Я пробовал:

- (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 для меня даже при сравнении с другой строкой.

Каков правильный способ сделать это и какой результат я должен ожидать?

4b9b3361

Ответ 1

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

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

Ответ 2

[returnedString isEqualToString: @"thisString"]

Ответ 3

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

Вы можете использовать isEqualToString, который возвращает YES или NO.

Ответ 4

if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");

Ответ 5

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

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

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