![](/img/trans.png)
[英]Is there a situation that when range.location > targetString.length, range.length !=0
[英]NSRange: range.location != NSNotFound vs. range.length > 0
我正在浏览我的一个应用程序中的一些旧代码,并在可能存在问题的领域修复代码。
我看到很多旧代码使用...
NSRange range = //determine range here....
if(range.length > 0)
{
//do stuff
}
该代码是“罚款”,还是应该将其改为此?
NSRange range = //determine range here....
if(range.location != NSNotFound)
{
//do stuff
}
这两种方法基本上是否相同?
这两个检查并不总是相同的。 这取决于范围的生成方式。 例:
NSRegularExpression *re = [NSRegularExpression
regularExpressionWithPattern:@"(?= )" options:0 error:NULL];
NSTextCheckingResult *result = [re firstMatchInString:@"hello world"
options:0 range:NSMakeRange(0, 11)];
NSLog(@"range = %@", NSStringFromRange(result.range));
范围的长度为0,但其位置为5,而不是NSNotFound
。
答案取决于您使用的功能/方法。 NSRange
只是一个结构,因此您需要阅读您正在调用的函数/方法的文档。
例子:
NSRangeFromString
返回文本表示的范围。
...如果aString不包含任何整数,则此函数返回NSRange结构,其位置和长度值均为0。
在这种情况下,检查NSNotFound
将不起作用。
...如果找不到aString或为空(@“”),则返回{NSNotFound,0}。
这里记录了位置将是NSNotFound
, length
将为0,因此任何一个检查都可以,但是,我建议根据NSNotFound
检查位置。
NSNotFound定义为“NSIntegerMax”。 即使它们产生相同的结果,您的第二个显示器也更具可读性和自我记录性。 也许你不应该找到它们并改变它们,但只需转向前进即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.