iOS开发中rangeOfString:的一个需要注意的地方

一般我们判断某个字符串中是否包含指定的字符串时,往往会用到rangeOfString:方法,但这里就会有个小细节需要注意的,最近就发现在程序中出现了这个bug。细节没处理好吧,但往往细节决定成败。

//NSString *testString = @"this is a string!";
//rangeOfString:如果字符串为nil,那 != NSNotFound 都是成立的,即永远都是true
NSString *testString = nil;
BOOL found = [testString rangeOfString:@"this"].location != NSNotFound;
NSLog(@"found:%@",@(found));//永远都是1

我们应该使用下面的几种方式来修改我们的判断。

//所以造成在程序中可能会出现判断出错的bug,正常是如果这个字符串为空时,应是false,所以应用要用下面的3种方式判断
    if (testString && [testString rangeOfString:@"this"].location != NSNotFound) {
        NSLog(@"testString: found1!%@",testString);
    }
    //或者使用下面的方式
    if ([testString rangeOfString:@"this"].length > 0) {
        NSLog(@"testString: found2!%@",testString);
    }
    
    //扩展:iOS8以后可以使用containsString:
    if ([testString containsString:@"this"]) {
         NSLog(@"testString: found3!%@",testString);
    }

这样在判断时就不会出现错误了。所以特别要注意像nil、NSNULL、@""等空值判断的处理,可以统一封装成一个函数。

你可能感兴趣的:(iOS开发中rangeOfString:的一个需要注意的地方)