Verificação da igualdade no Objective-C
-
21-09-2019 - |
Pergunta
Como verificar a chave no dicionário é a mesma que a string no parâmetro do método? ou seja, no código abaixo, o dictobj é o objeto do NSMutabledictionary e, para cada chave no dictobj, preciso comparar com a string. Como conseguir isso? Devo digitar a chave para NSString ??
-(void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if(key == string)// this is wrong since key is of type id and string is of NSString,Control doesn't come into this line
{
//do some operation
}
}
}
Solução
Quando você usa o ==
Operador, você está comparando valores de ponteiro. Isso só funcionará quando os objetos que você está comparando forem exatamente o mesmo objeto, no mesmo endereço de memória. Por exemplo, este código retornará These objects are different
Porque, embora as cordas sejam iguais, elas são armazenadas em diferentes locais na memória:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
Quando você compara seqüências -isEqualToString:
método de NSString
. Este código retornará These strings are the same
Porque compara o valor dos objetos da string em vez dos valores do ponteiro:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
Para comparar objetos Arbitrários Objetivos-C, você deve usar o mais geral isEqual:
método de NSObject
. -isEqualToString:
é uma versão otimizada de -isEqual:
que você deve usar quando souber que os dois objetos são NSString
objetos.
- (void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if([key isEqual:string])
{
//do some operation
}
}
}