【问题标题】:Objective C: Compare Array Element to String目标 C:比较数组元素和字符串
【发布时间】:2011-02-16 14:57:35
【问题描述】:

您好,

我试图简单地将 NSString 与 NSArray 进行比较。

这是我的代码:

NSString *username=uname.text;
    NSString *regex=@"^[a-zA-Z0-9-_.]{3,20}$";
    NSArray *matchArray=nil;
    matchArray=[username componentsMatchedByRegex:regex];
    if(matchArray[0] == "asdf"){   //this line causes the problem!
        NSLog(@"matchArray %@",matchArray);
    }

我收到“二进制操作数无效 ==”错误。

如何比较字符串?

非常感谢,

【问题讨论】:

  • if 语句之前的 matchArray 是什么?

标签: iphone objective-c string compare


【解决方案1】:

您试图将 NSString 与 C 字符串 (char *) 进行比较,这是错误的。 matchArray 是一个 NSArray 所以你也不能把它当作一个 C 数组,你必须使用它的 objectAtIndex: 方法并传入索引。

改用这个:

if ([[matchArray objectAtIndex:0] isEqualToString:@"asdf"]) {
    NSLog(@"matchArray %@", matchArray);
}

解决你的cmets,isEqualToString:没有出现在自动完成中的原因是因为Xcode无法猜测matchArray包含NSStrings(它只知道它包含ids,即任意Objective- C 对象)。如果您真的想确定,您可以执行显式转换,但如果您不这样做也没关系:

if ([(NSString *)[matchArray objectAtIndex:0] isEqualToString:@"asdf"]) {
    NSLog(@"matchArray %@", matchArray);
}

【讨论】:

  • 嘿,谢谢。它现在似乎正在工作,虽然我现在正在抛出 NSExceptions...
  • @Eamorr:他们在哪里说了什么?
  • 由于未捕获的异常“NSRangeException”而终止应用程序,原因“*** -[NSArray objectAtIndex:]:索引 0 超出了空数组的范围”。认为我需要在执行 if 语句之前检查数组是否有值...谢谢!
  • @Eamorr:是的,除此之外应该没问题。
【解决方案2】:

您想使用 -objectAtIndex 来获取数组元素。不是 C 数组访问器语法

【讨论】:

  • 好的,我试过 if([matchArray objectAtIndex:0) xxxxx @"asdf"),但是 xxxxx 的位置是什么? isEqualToString 不显示在自动完成...非常感谢,
  • [[matchArray objectAtIndex:0] isEqualTo: @"asd"]
【解决方案3】:

尝试使用:

[[matchArray objectAtIndex:0] isEqualToString:@"asdf"];

无论如何,字符串“asdf”应该是@“asdf”

【讨论】:

  • isEqualToString 没有出现在自动完成中;(
  • 用objectAtIndex试试这个
  • 嘿,它现在可以工作了,一旦我用方括号括起来
猜你喜欢
  • 2015-07-16
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多