2

次のコードで、出力される拡張範囲が "location: 1, length: 1" である理由がわかりません。範囲の長さが 0 から 1 に拡張されたのはなぜですか?

NSString * text = @"abc";
NSRange range = NSMakeRange(1, 0);
NSRange extendedRange  = [text rangeOfComposedCharacterSequencesForRange:range];
NSLog(@"extended range: location %d, length : %d ",extendedRange.location,extendedRange.length);

ドキュメントによると、この結果は次のようになります。

範囲内の構成された文字シーケンスを含むレシーバー内の範囲。

次の議論で

This method provides a convenient way to grow a range to include all composed character sequences it overlaps.

しかし、テキスト @"abc" には合成文字が含まれていないため、結果は変更されていない同じ範囲であると思われます。とにかく、長さ 0 の範囲はどの文字とも重ならないでしょう。

これは私にはバグのように見えますが、何かを見落としている可能性があります。それは正常ですか?

4

2 に答える 2

1

おそらくバグです。

の実装では、範囲の開始インデックスと終了インデックスを使用して2回rangeOfComposedCharacterSequencesForRange:呼び出すだけでrangeOfComposedCharacterSequenceAtIndex:、結合された範囲が返されます。

ドキュメントには、提供された範囲の端にある文字が含まれないことは明示されていませんが、観察された動作が間違っていると感じることに同意します。

バグを報告する必要があります。

于 2013-03-01T11:22:55.183 に答える
0

sayのドキュメント_rangeOfComposedCharacterSequencesForRange:

戻り値

範囲内の構成された文字シーケンスを含むレシーバー内の範囲。

討論

このメソッドは、重複するすべての合成文字シーケンスを含むように範囲を拡張する便利な方法を提供します。

location有効なため、範囲がこの文字に重なると見なされますlocation

于 2013-03-01T11:00:39.173 に答える