3

この比較の結果が になるのはなぜNOですか?

BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];

私がそれをテストする@"th"@"Th"YES.

ここで何が欠けていますか?

4

1 に答える 1

6

これは直感に反しますが、引数はレシーバーrangeにのみ適用されます。他の文字列 ( への引数) の長さは、範囲制限されていません。あなたの呼び出しは{0,2} の範囲に縮小され(つまり、これは効果がありません)、それを と比較します。compare:@"th"@"th"@"They"

次のことがわかります。

NSComparisonResult comp = [@"They" compare:@"th" 
                                   options:NSCaseInsensitiveSearch 
                                     range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;

@"They"これは、レシーバー ( ) を ( に)削減@"Th"してから比較を行うため、期待どおりの結果が得られます。

于 2012-05-25T20:17:03.223 に答える