将来,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
和..<
不起作用。
答案 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)
}