我不明白为什么在下面的代码中,将要打印的扩展范围是 “位置: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的范围不会与任何字符重叠。
对我来说这看起来像个错误,但我可能错过了一些东西。这是正常的吗?
答案 0 :(得分:1)
这可能是一个错误。
rangeOfComposedCharacterSequencesForRange:
的实现只调用rangeOfComposedCharacterSequenceAtIndex:
两次,使用范围的起始和结束索引,并返回组合范围。
文档没有明确说明从未提供所提供范围边缘的字符,但我同意观察到的行为感觉不对。
你应该file a bug。
答案 1 :(得分:0)
rangeOfComposedCharacterSequencesForRange:
的{{3}}说
返回值
接收器中包含范围内组合字符序列的范围。
讨论
此方法提供了一种方便的方法来扩展范围,以包括它重叠的所有组合字符序列。
因为location
有效,所以考虑范围重叠此location