【发布时间】:2017-07-24 09:45:21
【问题描述】:
我想得到一个字符串的子字符串,它只是前 N 个字符。 (例如 10 个)。
但字符串是函数生成的输出。
我想这样做......
let string = someInputString
.someGeneratorFunctionThatReturnsAString()
.substring(to: 10)
但我不能这样做。因为 substring 函数中的索引需要字符串本身来确定第 10 个字符在哪里。
- 第一个问题...为什么会这样?
- 第二个问题...如何在不需要原始字符串获取索引的情况下获得这样的子字符串。
【问题讨论】:
-
据我所知,它或多或少是这样的:Swift 中的字符串在内部存储为 UTF-8,因此无法进行随机访问(字符的字节长度可变),所以有这个叫做“索引”的东西是你创建的一个特定的字符串,并通过前进或后退整数个位置(顺序)来修改,它们仅适用于该字符串。
-
@NicolasMiari:实际上字符串在内部使用 ASCII 或 UTF-16,但这是一个实现细节,将来可能会改变。
-
@NicolasMiari:不是这样。但是
Character是一个“扩展字形簇”,由一个或多个 unicode 标量组成。 -
@Fogmeister:这是您的问题的简单解决方案:stackoverflow.com/a/32984213/1187415。
-
@Fogmeister 看到了吗?我说的是我的** :-) 听听那些知道的人!