rangeOfComposedCharacterSequencesForRange将0个字符范围转换为1个字符范围

时间:2013-03-01 10:49:50

标签: ios objective-c unicode nsstring

我不明白为什么在下面的代码中,将要打印的扩展范围是 “位置:1,长度: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的范围不会与任何字符重叠。

对我来说这看起来像个错误,但我可能错过了一些东西。这是正常的吗?

2 个答案:

答案 0 :(得分:1)

这可能是一个错误。

rangeOfComposedCharacterSequencesForRange:的实现只调用rangeOfComposedCharacterSequenceAtIndex:两次,使用范围的起始和结束索引,并返回组合范围。

文档没有明确说明从未提供所提供范围边缘的字符,但我同意观察到的行为感觉不对。

你应该file a bug

答案 1 :(得分:0)

rangeOfComposedCharacterSequencesForRange:的{​​{3}}说

  

返回值

     

接收器中包含范围内组合字符序列的范围。

     

讨论

     

此方法提供了一种方便的方法来扩展范围,以包括它重叠的所有组合字符序列。

因为location有效,所以考虑范围重叠location

的字符