在for语句中使用String.CharacterView.Index.successor()

时间:2016-03-24 05:54:21

标签: ios swift swift2 swift2.2

将来,C-style for statements will be removed from Swift。虽然有许多替代方法可以使用C风格的语句,例如使用stride..<运算符,但这些方法仅适用于某些条件

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

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个索引都没有帮助

还有更多&#34; swifty&#34;循环除while循环之外的字符串的每个其他索引的方法?这个问题并不仅仅与字符串索引有关,而只是与.successor()等函数有关的对象,其中stride..<不起作用。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)
}