誰かがこの一見奇妙な振る舞いを説明できるかどうか疑問に思っていましたか?
NSString *emptyString = @"";
NSString *aBunchOfAsterisks = @"*********";
NSLog(@"NSString's caseInsensitiveCompare: says the two strings are %@", [emptyString caseInsensitiveCompare:aBunchOfAsterisks] == NSOrderedSame ? @"EQUAL" : @"NOT EQUAL");
NSLog(@"NSComparisonMethods protocol's isCaseInsensitiveLike: says aBunchOfAsterisks is %@ to emptyString", [emptyString isCaseInsensitiveLike:aBunchOfAsterisks] ? @"EQUAL" : @"NOT EQUAL");
NSLog(@"NSComparisonMethods protocol's isCaseInsensitiveLike: says emptyString is %@ to aBunchOfAsterisks", [aBunchOfAsterisks isCaseInsensitiveLike:emptyString]? @"EQUAL" : @"NOT EQUAL");
以下をログに記録します
NSString の caseInsensitiveCompare: 2 つの文字列が等しくない
ことを示すNSComparisonMethods プロトコルの isCaseInsensitiveLike: aBunchOfAsterisks が emptyString と等しいことを示す
NSComparisonMethods プロトコルの isCaseInsensitiveLike: emptyString が aBunchOfAsterisks と等しくないことを示す
なぜ2番目の比較方法、つまり
[emptyString isCaseInsensitiveLike:aBunchOfAsterisks];
はい?さらに悪いことに、これは文字が ' * ' の場合にのみ発生するようです。aBunchOfAsterisksのその他の値および 3 つの比較方法すべては、NOを返します。