在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