2011-03-29 50 views
6

我正在測試與另一個字符串,我注意到,如果第一個字符串是零,返回值等於NSOrderedSame(值爲0)。iPhone - 比較無NSString與另一個有價值的NSString返回NSOrderedSame

if([oneString compare:otherString] == NSOrderedSame)如果oneString爲零,則返回YES。

所以我應該測試 if(oneString != nil && [oneString compare:otherString] == NSOrderedSame)

我想我也應該在條件測試otherString,並進行了特殊情況下,如果我想要那個[nil compare:nil]回報NSOrderedSame

有沒有更方便的方法來比較字符串,而不必做這樣的測試,並真的測試兩個字符串是否相同?

回答

11

您可以嘗試

[someString isEqualToString:@"someOtherString"]; 

或者不區分大小寫:

[[someString lowerCaseString] isEqualToString:[otherString lowerCaseString]]; 
3

我會使用的方法@seretur建議,除非你擔心的情況。在這種情況下,我會使用caseInsensitiveCompare:,這與您當前使用的compare:方法類似。

您還可以簡化if語句,像這樣:

if (oneString && [oneString caseInsensitiveCompare:otherString] == NSOrderedSame) { ... 
1

將某物發送給nitl是絕對合法的。但根據定義,它總是會返回零。和零本身actually is 0

如果我們now look at NSComparisonResult,NSOrderedSame也是0。

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame, 
    NSOrderedDescending 
}; 
typedef NSInteger NSComparisonResult;