【发布时间】:2016-10-18 00:49:50
【问题描述】:
我了解到 Swift 字符串不能由整数值索引。我记住了它,我使用了规则。但我从来没有完全理解它背后的机制。
来自官方文档的解释如下
"不同的字符可能需要不同数量的内存来存储,因此为了确定哪个字符位于特定位置,您必须从该字符串的开头或结尾遍历每个 Unicode 标量。因此, Swift 字符串不能被整数值索引"
读了好几遍,还是不太明白。谁能解释一下为什么 Swift String 不能被整数值索引?
非常感谢
【问题讨论】:
-
developer.apple.com/library/ios/documentation/Swift/Conceptual/… - 这是你正在谈论的话题。至于我,将很难比你从头到尾阅读这个主题更清楚地解释。
-
快速提示,不是完整的解释:Swift 字符串尊重 unicode,例如,一些表情符号是“组合”字符,它们显示为一个字符,但实际上最多可以使用四个真实字符 -只是我们看不到,显示的时候几个字符合二为一。这就是为什么我们不能依赖 Swift 中字符串中字符的“索引”。
-
@Moritz,这解释了为什么不能通过将整数索引映射到内存中出现的相应 unicode 代码点来实现整数索引,但这并不妨碍实现@987654323 的接口@ 对应于
myString中的第 7 个规范符号。您的提示是绝对正确的,但以上是我(可能还有其他人)查找问题的原因。 -
“因此,Swift 字符串不能被整数值索引。” ...我觉得有趣的是we end up using integers,从
startIndex计算索引,例如,第三个字符从let start = string.index(string.startIndex, offsetBy: 2)开始。我理解其中的原理,但这并不能证明增加的复杂性是合理的。