在 for 语句中使用 String.CharacterView.Index.successor()
Using String.CharacterView.Index.successor() in for statements
以后,C-style for statements will be removed from Swift。虽然有许多替代方法可以使用 C 风格的 for 语句,例如使用 stride
或 ..<
运算符,但这些仅在某些条件下有效
例如,在旧版本的 swift 中,可以使用 C 风格的 for 语句
循环遍历字符串的所有其他索引 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
然而,这无助于遍历字符串的每个 other 索引,或字符串的每个第 n 个索引
除了 while
循环之外,还有其他 "swifty" 循环遍历字符串的每个其他索引的方法吗?这个问题不仅涉及字符串索引,还涉及具有 .successor()
等函数的对象,其中 stride
和 ..<
不起作用。
你可以使用 'stepping'
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([=10=], ) } // print
结果:
0 a
2 c
4 e
6 g
以后,C-style for statements will be removed from Swift。虽然有许多替代方法可以使用 C 风格的 for 语句,例如使用 stride
或 ..<
运算符,但这些仅在某些条件下有效
例如,在旧版本的 swift 中,可以使用 C 风格的 for 语句
循环遍历字符串的所有其他索引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
然而,这无助于遍历字符串的每个 other 索引,或字符串的每个第 n 个索引
除了 while
循环之外,还有其他 "swifty" 循环遍历字符串的每个其他索引的方法吗?这个问题不仅涉及字符串索引,还涉及具有 .successor()
等函数的对象,其中 stride
和 ..<
不起作用。
你可以使用 'stepping'
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([=10=], ) } // print
结果:
0 a
2 c
4 e
6 g