Swift 2.2可以实现以下功能:
let m = "alpha" for i in m.startIndex..<m.endIndex { print(m[i]) } a l p h a
使用3.0,我们会收到以下错误:
类型“范围”(又名“范围”)不符合协议“序列”
我正在尝试对字符串进行快速的非常简单的操作-只需遍历字符串的前半部分(或更常见的问题:遍历字符串的范围)。
我可以执行以下操作:
let s = "string" var midIndex = s.index(s.startIndex, offsetBy: s.characters.count/2) let r = Range(s.startIndex..<midIndex) print(s[r])
但是这里我并没有真正遍历字符串。所以问题是:如何遍历给定字符串的范围。喜欢:
for i in Range(s.startIndex..<s.midIndex) { print(s[i]) }
您可以使用以下indices属性来遍历字符串characters:
indices
characters
let letters = "string" let middle = letters.index(letters.startIndex, offsetBy: letters.characters.count / 2) for index in letters.characters.indices { // to traverse to half the length of string if index == middle { break } // s, t, r print(letters[index]) // s, t, r, i, n, g }
从“ 字符串和字符-计数字符” 部分的文档中: __
扩展字素簇可以由一个或多个Unicode标量组成。这意味着不同的字符(以及同一字符的不同表示形式)可能需要存储不同数量的内存。因此,Swift中的字符在字符串表示中不会各自占用相同数量的内存。 结果,如果不迭代字符串 以确定其扩展字素簇边界, 就无法计算字符串中的字符数 。
强调是我自己的。
这将不起作用:
let secondChar = letters[1] // error: subscript is unavailable, cannot subscript String with an Int