この比較の結果が になるのはなぜ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"
してから比較を行うため、期待どおりの結果が得られます。