Сравнение строк в 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 для меня даже при сравнении с другой строкой.
Каков правильный способ сделать это и какой результат я должен ожидать?
Ответы
Ответ 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
.