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.