Confronto di stringhe in Objective-C


92

Al momento ho configurato un server web che comunico tramite SOAP con la mia app per iPhone. Sto restituendo una stringa contenente un GUID e quando provo a confrontarlo con un'altra stringa ottengo alcuni risultati strani.

Perché questo non dovrebbe sparare? Sicuramente le due corde sono una partita?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
Questa domanda ora è per lo più inutile perché lo screenshot è scomparso. Questo è il motivo per cui il codice dovrebbe essere copiato e incollato nelle domande.
— jscs

Lo screenshot era l'errore credo, ma la risposta è stata data come 2 anni fa!
— ingh.

1
Ma nessun lettore futuro può vedere l'errore o il codice che stavi usando per sapere se è uguale al loro, il che significa che questa domanda non può aiutare nessun altro.
— jscs

Cercherò l'immagine. Capisco che sia come una base di riferimento per altre domande, ma chiuderlo ora è solo un po 'inutile.
— ingh.

2
Perché questa domanda è chiusa? È una domanda perfettamente valida!
— ibz

Risposte:


213

Usa il -isEqualToString:metodo per confrontare il valore di due stringhe. L'utilizzo ==dell'operatore C confronterà semplicemente gli indirizzi degli oggetti.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
AH! Ringraziandoti moltissimo. Sentiti un po 'stupido con questo!
— ingh.

3
La mia ipotesi è che in ObjectiveC ++ potresti creare un sovraccarico di operatori per darti capacità sintatticamente zuccherina di usare == ma nessun programmatore C obiettivo sano lo farebbe, perché == viene utilizzato solo per i controlli di identità negli oggetti C obiettivo.
— Warren P

48

È possibile utilizzare il confronto con distinzione tra maiuscole e minuscole, a seconda di ciò di cui si ha bisogno. La distinzione tra maiuscole e minuscole è così:

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

Case-insensitive è così:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
Penso che dovrebbe essere: ([category compare: @ "Some String" options: NSCaseInsensitiveSearch] == NSOrderedSame)
— JaakL

9
Fai attenzione alla funzione "compare" perché se la stringa (in questo caso "categoria") è nulla, il confronto restituirà sempre NSOrderedSame.
— nh32rg

Questo è un ottimo punto @ nh32rg !! +1 per quello! IsEqualToString ha lo stesso problema?
— badweasel

5

Puoi confrontare la stringa con le funzioni seguenti.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.