我正在测试另一个字符串,我注意到如果第一个字符串为nil,则返回值等于NSOrderedSame(值为0)。
如果oneString为nil,则 if([oneString compare:otherString] == NSOrderedSame)
返回YES。
所以我应该测试一下
if(oneString != nil && [oneString compare:otherString] == NSOrderedSame)
我想我也应该在条件中测试otherString,如果我希望[nil compare:nil]
返回NSOrderedSame
,请设置一个特殊情况。
是否有更方便的方法来比较字符串而不必进行此类测试并真正测试两个字符串是否相同?
答案 0 :(得分:11)
你可以尝试
[someString isEqualToString:@"someOtherString"];
或者不区分大小写:
[[someString lowerCaseString] isEqualToString:[otherString lowerCaseString]];
答案 1 :(得分:4)
除非你担心案件,否则我会使用@seretur建议的方法。在这种情况下,我会使用caseInsensitiveCompare:
,它类似于您当前使用的compare:
方法。
您也可以简化if语句:
if (oneString && [oneString caseInsensitiveCompare:otherString] == NSOrderedSame) { ...
答案 2 :(得分:2)
根据the documentation,字符串不能为零。如果是,则可能导致奇怪的行为。
答案 3 :(得分:1)
向nitl发送内容是绝对合法的。但根据定义,它总是会返回零。并且nil本身actually is 0。
如果我们now look at NSComparisonResult
,NSOrderedSame
也是0。
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;