Как сравнить строки?(`==` возвращает неправильное значение) - PullRequest
3 голосов
/ 13 июля 2011

У меня есть часть iPhone SDK, и я пытаюсь сделать несколько простых приложений.В этом я хочу сравнить первый символ self.label.string с последним из ((UITextField *)sender).text.Я решил назвать их self.texty и self.input, соответственно.

Я ожидал бы этого, если бы при определенных обстоятельствах мне возвращалось заявление yes, однако я не могу этого сделать.

(в моем случае мой self.label.string был равен 'привет!', А мой self.input заканчивался на 'h'.)

self.input = [NSString stringWithFormat:@"%@", [((UITextField *)sender).text substringFromIndex:[((UITextField *)sender).text length]-1]];
self.texty = [NSString stringWithFormat:@"%@", [self.label.string substringToIndex:1]];

if (self.input == self.texty) {
    return yes;
} else {
    return no;
}

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Сравнение строк выполняется не с ==, а с одним из методов сравнения NSString .

Например:

if ([self.input compare:self.texty] == NSOrderedSame) {
3 голосов
/ 13 июля 2011
if ([self.input isEqualToString:texty]) {
    return yes;
} else {
    return no;
}

РЕДАКТИРОВАТЬ:

Или лучшую версию, как отметили комментаторы:

return [self.input isEqualToString:texty];
1 голос
/ 13 июля 2011

Если вам интересно, почему оператор == не работает должным образом, это потому, что вы фактически сравниваете два скалярных типа (указатели на объекты NSString), а не содержимое самих объектов NSString.В результате он вернет false, если две сравниваемые строки NSS не являются фактически одним и тем же экземпляром в памяти независимо от содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...