【问题标题】:rangeOfComposedCharacterSequencesForRange transforming 0 character range into 1 character rangerangeOfComposedCharacterSequencesForRange 将 0 个字符范围转换为 1 个字符范围
【发布时间】:2013-03-01 10:49:49
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c unicode nsstring


    【解决方案1】:

    这可能是一个错误。

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

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

    你应该file a bug

    【讨论】:

      【解决方案2】:

      rangeOfComposedCharacterSequencesForRange:documentation

      返回值

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

      讨论

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

      由于location 是有效的,因此考虑到范围重叠location 处的字符

      【讨论】:

      • 您链接到的文档不是 rangeOfComposedCharacterSequencesForRange 的文档。你认为这还是有联系的吗?
      • 这个链接对我有用,如果你去NSString的文档然后搜索rangeOfComposedCharacterSequencesForRange:你会找到它,你也可以从组织者那里做
      • 我看不出长度为 0 的范围如何与任何内容重叠。对我来说,这听起来仍然像是一个错误。
      • 我同意你的观点,我只是想找到一个逻辑解释,我认为你应该提交一个错误
      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      相关资源
      最近更新 更多