この比較の結果が になるのはなぜNOですか?
BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];
私がそれをテストする@"th"と@"Th"、YES.
ここで何が欠けていますか?
この比較の結果が になるのはなぜNOですか?
BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];
私がそれをテストする@"th"と@"Th"、YES.
ここで何が欠けていますか?
これは直感に反しますが、引数はレシーバーrangeにのみ適用されます。他の文字列 ( への引数) の長さは、範囲制限されていません。あなたの呼び出しは{0,2} の範囲に縮小され(つまり、これは効果がありません)、それを と比較します。compare:@"th"@"th"@"They"
次のことがわかります。
NSComparisonResult comp = [@"They" compare:@"th"
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;
@"They"これは、レシーバー ( ) を ( に)削減@"Th"してから比較を行うため、期待どおりの結果が得られます。