我正在其中一个应用程序中查看一些较旧的代码,并在可能存在问题的区域中修复了代码。

我看到很多使用...的旧代码

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

关于ios - NSRange:range.location!= NSNotFound vs. range.length> 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12827830/

10-13 04:54