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

这可能是一个错误。

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

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

你应该提交一个错误

于 2013-03-01T11:22:55.183 回答
0

说的文档_rangeOfComposedCharacterSequencesForRange:

返回值

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

讨论

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

因为location它是有效的,它正在考虑范围与这个字符重叠location

于 2013-03-01T11:00:39.173 回答