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

将来, C语言的语句将从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() } 

但它不是一个解决方法。 有一个..<运算符,这对于循环每个string的索引来说是完美的

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

然而,这并不能帮助循环遍历string的每一个索引,或者每个string的第n个索引

除了while循环之外,是否还有更多的“swifty”方式循环其他string的其他索引? 这个问题不仅适用于string索引,而且只适用于具有诸如.successor()函数的对象,其中stride..<不起作用。

你可以使用“步进”

 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) } 

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

 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