原始字符串更改后如何操作现有的`String.Index`?

时间:2017-06-28 01:21:58

标签: swift

背景

我正在swift中编写一种语法标记工具。我解析文本,然后保存标记信息,我称之为Mark(名称为String,范围为Range<String.Index>)。我选择Range<String.Index>超过NSRange以便将来证明界面。

问题

为了支持即时解析,我需要能够操作范围。例如。文本已在文本视图中编辑,而不是重新解析整个文本,我只想解析编辑的块以获得性能增益。问题是如何在编辑范围之后移动Marks?由于它们永远不会改变,唯一改变的是范围。

我已尝试the index function这样:

let newStartIndex = string.index(oldStartIndex, offsetBy: changeInLength)

但问题是oldStartIndex很可能超出新string的范围。然后它会抛出一个致命的错误。即使我保留了旧文本的副本并使用它来执行索引偏移,我认为修改后的字符串中的旧索引可能不一定保持其完整性。

使用NSRange,事情要简单得多,只需移动location属性即可。但关键是通过使用Range<String.Index>来验证界面。

0 个答案:

没有答案