Mik*_*keS 14 objective-c nsstring ios nsrange
我正在浏览我的一个应用程序中的一些旧代码,并在可能存在问题的领域修复代码.
我看到很多旧代码使用...
NSRange range = //determine range here....
if(range.length > 0)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
该代码是"罚款",还是应该将其改为此?
NSRange range = //determine range here....
if(range.location != NSNotFound)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
这两种方法基本上是否相同?
rob*_*off 12
这两个检查并不总是相同的.这取决于范围的生成方式.例:
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));
Run Code Online (Sandbox Code Playgroud)
范围的长度为0,但其位置为5,而不是NSNotFound.
答案取决于您使用的功能/方法.NSRange只是一个结构,所以你需要阅读你正在调用的函数/方法的文档.
例子:
NSRangeFromString
返回文本表示的范围.
...如果aString不包含任何整数,则此函数返回NSRange结构,其位置和长度值均为0.
在这种情况下,检查NSNotFound不起作用.
...如果找不到aString或为空(@""),则返回{NSNotFound,0}.
这里记录了位置将是0 NSNotFound并且length将为0,因此任何一个检查都可以工作,但是,我建议检查位置NSNotFound.
| 归档时间: |
|
| 查看次数: |
19302 次 |
| 最近记录: |