2009-05-19 15 views
17

que he intentado:Comparación de cadenas en 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 } 
} 

, que nunca coincide.

entonces me han tratado

if ([returnedString compare:@"thisString"] == 1) 

Pero el método de comparación siempre devuelve 1 para mí, incluso cuando se comparan con una cadena diferente.

¿Cuál es la forma correcta de hacerlo y qué resultado debo esperar?

Respuesta

45

En primer lugar, está utilizando el operador == para comparar dos punteros a objetos (del tipo NSString *). Entonces eso devuelve verdadero cuando los punteros son los mismos, no cuando las cadenas tienen los mismos contenidos. Si desea comparar si dos cadenas son iguales, debe usar isEqualToString: o isEqual: (isEqual: es más general, ya que funciona para todo tipo de objetos).

En segundo lugar, compare: rendimientos 0 (NSOrderSame) cuando son los mismos, y 1 (NSOrderedDescending) cuando el primero es mayor que el segundo. De hecho, devuelve 1 solo cuando son diferentes (específicamente, cuando el primero es mayor que el segundo).

+4

Técnicamente si usted está comparando NSStrings se debe utilizar -isEqualToString: debido a que el método ha sido optimizado para el caso en que el argumento es también un objeto NSString. –

12
[returnedString isEqualToString: @"thisString"] 
5

Al comparar dos cadenas idénticas compare volverá NSOrderedSame, que es 0. También puede devolver NSOrderedAscending, -1, y NSOrderedDescending, 1.

Es posible que prefiera utilizar isEqualToString que devuelve SÍ o NO .

2

El operador == cuando se aplica a objetos comprueba si los punteros son iguales.

usted tiene que utilizar -compare método o uno de sus compañeros - compare:options: - compare:options:range: o -compare:options:range:locale: que devuelven un NSComparisonResult (NSOrderAscending, NSOrderSame, NSOrderDescending)

Si sólo necesita comparación de igualdad, puede utilizar -isEqualToString: que devuelve una BOOL valor.

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