Проверка на равенство в Objective-C
-
21-09-2019 - |
Вопрос
Как мне проверить, что ключ в словаре совпадает со строкой в параметре метода?то есть в приведенном ниже коде dictobj является объектом NSMutableDictionary , и для каждого ключа в dictobj мне нужно сравнить со строкой.Как этого добиться ?Должен ли я вводить ключ typecase в 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
}
}
}
Решение
Когда вы используете ==
оператор, вы сравниваете значения указателя.Это сработает только тогда, когда объекты, которые вы сравниваете, являются точно таким же объектом, с тем же адресом памяти.Например, этот код вернет These objects are different
потому что, хотя строки одинаковы, они хранятся в разных местах памяти:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
Когда вы сравниваете строки, вы обычно хотите сравнить текстовое содержимое строк, а не их указатели, поэтому вам следует -isEqualToString:
способ NSString
.Этот код вернет These strings are the same
потому что он сравнивает значения строковых объектов, а не значения их указателей:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
Для сравнения произвольных объектов Objective-C вам следует использовать более общий isEqual:
способ NSObject
. -isEqualToString:
является оптимизированной версией -isEqual:
который вы должны использовать, когда вы знаете, что оба объекта являются NSString
Объекты.
- (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
}
}
}