iOS rangeofString 在主字符串为 nil 且子字符串不为 nil 时做什么?

What iOS rangeofString do when main string is nil and substring is not nil?

NSString *result = nil;
if([result rangeOfString:@"SUCCESS"].location != NSNotFound)
{
    NSLog(@"Location: %lu", [result rangeOfString:@"SUCCESS"].location);
    NSLog(@"Length: %lu", [result rangeOfString:@"SUCCESS"].length);
}
else{
    NSLog(@"NULL found:  %@", result);
}

此代码显示输出:

2016-05-12 18:51:44.589 TestProject[21666:207505] Location: 0

2016-05-12 18:51:44.590 TestProject[21666:207505] Length: 0

实际上它应该显示输出:

NULL found:  (null)

请解释输出的原因

从下面link我得到了关于这类问题的很好的解释:

How do I check if a string contains another string in Objective-C?

具体可以阅读@ucangetit 的回答。

你可以按照这两个函数....

- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
    if(otherString && [string rangeOfString:otherString].length)
        return YES;
    else
        return NO;
}

或简单地:

- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
    return (otherString && [string rangeOfString:otherString].length);
}

在我看来,如果 range.length == 0 => 没有找到。

NSString *result = nil;
NSRange range = [result rangeOfString:@"SUCCESS"];//location=0, length=0
if(range.length > 0) //Found
{
    NSLog(@"Location: %lu", range.location);
    NSLog(@"Length: %lu", range.length);
}