NSString问题 - rangeOfString方法

32

我遇到了一个问题,但是不知道怎么解决。

我正在尝试在一个字符串上运行rangeOfString方法,但我不确定如何确定该字符串未被找到。例如:

NSRange range = [@"abc" rangeOfString:@"d" options:NSCaseInsensitiveSearch range:NSMakeRange(0,3)];

很明显,字符串“abc”中没有包含“d”。我希望能够做到这一点:

if(the range is empty since "d" is not in "abc")
   //do something

这个的代码是什么?

谢谢!

2个回答

72
NSString 的文档说明:
-[NSString rangeOfString]

返回值

一个NSRange结构,表示接收器中第一次出现aString的位置和长度。如果未找到aString或aString为空(@""),则返回{NSNotFound, 0}

因此,它看起来像:

if ([@"abc" rangeOfString:@"d"].location == NSNotFound){
  //Do something

这是苹果认可的方式。

编辑:

我犯了一个很严重的打字错误,已经修复,谢谢 Kalle。


2
你需要在那里放两个等号。 - Kalle
这是否意味着检查长度不符合“苹果认可”?;-) - Matt Long
我不知道。而且无论如何,仅仅因为它没有得到苹果的批准并不意味着它是错误的(参见:应用商店拒绝)。 - Jared Pochtar
1
检查长度也是正确的,但显然不够清晰。 - rimsky
如果字符串为空,则此方法无效。我会检查长度而不是字符串本身。 - Ghigo

13

检查范围的长度。如果长度不为零,则表示已找到。


从NSString.h的注释中可以看到:“如果目标字符串未找到,则这些方法返回长度为0”。我更喜欢这种方法,因为NSNotFound是一个#define NSIntegerMax,其值取决于运行时环境(即32位还是64位)。 - Rafael Nobre
检查长度更好。如果接收器为nil,则长度和位置都返回0。 - Dare2Dream

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接