2013-03-01 194 views
1

我不明白为什么在下面的代码中,将打印的扩展范围是 “location:1,length:1”。为什么范围长度从0延伸到1?rangeOfComposedCharacterSequencesForRange将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的范围不会与任何字符重叠。

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

回答

1

这可能是一个错误。

rangeOfComposedCharacterSequencesForRange:的执行只调用rangeOfComposedCharacterSequenceAtIndex:两次,范围的开始和结束索引并返回组合范围。

该文档没有明确指出在提供的范围边缘的字符从不包含,但我同意观察到的行为感觉不对。

您应该file a bug

0

rangeOfComposedCharacterSequencesForRange:documentation

返回值

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

讨论

此方法提供了一种方便的方式以生长范围,包括其重叠所有组成的字符序列。

location是有效的,它正在考虑的范围重叠人物在这个location

+0

要链接到的文档不是rangeOfComposedCharacterSequencesForRange中的一个。你认为这是相互联系的吗? – madewulf 2013-03-01 11:07:48

+0

链接适用于我,所有的方式,如果你去NSString的文档,然后搜索'rangeOfComposedCharacterSequencesForRange:'你会发现它,你也可以从组织者 – tkanzakic 2013-03-01 11:15:11

+1

做到这一点我看不到一个长度范围0可以重叠任何东西。它对我来说听起来像是一个bug。 – madewulf 2013-03-01 11:32:19