5

将来,C 风格的 for 语句将从 Swift 中移除。虽然有许多替代方法可以使用 C 风格的 for 语句,例如 usingstride..<operator,但这些仅在某些情况下有效

例如,在旧版本的 swift 中,可以String.CharacterView.Index使用 C 风格的 for 语句循环遍历字符串的每个其他索引

for var index = string.startIndex; index < string.endIndex; index = string.successor().successor(){
    //code
}

然而,这现在已被弃用。有一种方法可以做同样的事情,使用while循环

var index = string.startIndex
while index < string.endIndex{
    //code

    index = index.successor().successor()
}

但这只不过是一种解决方法。有..<运算符,它非常适合遍历字符串的每个索引

for index in string.startIndex..<string.endIndex

但这无助于遍历字符串的所有其他索引或字符串的每个第 n 个索引

除了循环之外,还有更多“快速”的方式来遍历字符串的所有其他索引while吗?这个问题不仅与字符串索引有关,还与具有.successor()一般功能的对象有关,例如在哪里工作stride..<不工作。

4

2 回答 2

4

让我们用函数式编程来做:

let text = "abcdefgh"

text.characters
    .enumerate()  // let's get integer index for every character
    .filter { (index, element) in index % 2 == 0 }  // let's filter out every second character
    .forEach { print($0, $1) } // print

结果:

0 a
2 c
4 e
6 g
于 2016-03-24T18:51:58.240 回答
2

你可以使用“步进”

let str = "abcdefgh"
for i in str.characters.indices where str.startIndex.distanceTo(i) % 2 == 0 {
    print(i,str.characters[i])
}

印刷

0 a
2 c
4 e
6 g

更新,基于 Sulthan 的笔记

for (i,v) in str.characters.enumerate() where i % 2 == 0 {
    print(i, v)
}
于 2016-03-24T06:29:33.697 回答