检查在Objective-C的平等检查在Objective-C的平等(Checking for eq

2019-05-12 02:27发布

如何检查在字典中的关键是相同的方法参数字符串? 即在下面的代码,dictobj是的NSMutableDictionary的对象,并为每个dictobj关键,我需要用绳子比较。 如何实现这一目标? 我应该典型案例关键的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
          }
     }
}

Answer 1:

当您使用==操作符,你是比较指针值。 这时候您比较的对象是完全一样的对象只会工作,在相同的内存地址。 例如,该代码将返回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
          }
     }
}


文章来源: Checking for equality in Objective-C