Swift 2.2、如何合并for循环语句?
In Swift 2.2, how to consolidate the for-loop statement?
在 Swift 2.2 中,C 风格的 for 语句已被弃用,因此我修改了以下 for 循环:
for var idx=data.count-1; idx>=0; --idx
进入
for idx in (0...data.count-1).reverse() // <--- new statement
但是我发现,当data.count
在执行过程中为0时,新语句会崩溃并报错fatal error: Can't form range with end < start
。
是否有 best/standard 方法来为这种情况编码?
P.S。我想我必须使用不同种类的 loops/syntax 来替换我统一的 C 风格循环。欢迎对此提出任何进一步的评论或建议。
您应该使用 Strideable.stride(through:by:)
来生成您的 for 循环范围,如下所示:
for idx in (data.count-1).stride(through: 0, by: -1) {
print(idx)
}
即使 data.count == 0
也有效。
创建范围为
0 ... data.count-1
如果 data.count
为零, 将以运行时异常终止。这是
通常最好使用 ..<
运算符来创建一个范围
省略其上限值,在您的情况下:
0 ..< data.count
这也适用于 data.count == 0
并创建一个空的
在这种情况下的范围。这适用于
向前和向后迭代:
for idx in 0 ..< data.count { ... }
for idx in (0 ..< data.count).reverse() { ... }
(当然,对于第二种情况,stride()
是一个明智的选择。)
改为使用 for idx in (0..<data.count).reverse()
。这将在 data.count == 0
.
时形成您想要的空范围
这么简单的循环,不需要算术运算。
如果data
是一个数组,使用indices
:
for index in data.indices {
}
for index in data.indices.reverse() {
}
或直接访问数据
for item in data {
}
for item in data.reverse() {
}
或前面使用enumerate
的组合
for (index, item) in data.enumerate() {
}
注意上面所有的for-in
循环也可以写成forEach
:
data.indices.forEach {
}
在 Swift 2.2 中,C 风格的 for 语句已被弃用,因此我修改了以下 for 循环:
for var idx=data.count-1; idx>=0; --idx
进入
for idx in (0...data.count-1).reverse() // <--- new statement
但是我发现,当data.count
在执行过程中为0时,新语句会崩溃并报错fatal error: Can't form range with end < start
。
是否有 best/standard 方法来为这种情况编码?
P.S。我想我必须使用不同种类的 loops/syntax 来替换我统一的 C 风格循环。欢迎对此提出任何进一步的评论或建议。
您应该使用 Strideable.stride(through:by:)
来生成您的 for 循环范围,如下所示:
for idx in (data.count-1).stride(through: 0, by: -1) {
print(idx)
}
即使 data.count == 0
也有效。
创建范围为
0 ... data.count-1
如果 data.count
为零, 将以运行时异常终止。这是
通常最好使用 ..<
运算符来创建一个范围
省略其上限值,在您的情况下:
0 ..< data.count
这也适用于 data.count == 0
并创建一个空的
在这种情况下的范围。这适用于
向前和向后迭代:
for idx in 0 ..< data.count { ... }
for idx in (0 ..< data.count).reverse() { ... }
(当然,对于第二种情况,stride()
是一个明智的选择。)
改为使用 for idx in (0..<data.count).reverse()
。这将在 data.count == 0
.
这么简单的循环,不需要算术运算。
如果data
是一个数组,使用indices
:
for index in data.indices {
}
for index in data.indices.reverse() {
}
或直接访问数据
for item in data {
}
for item in data.reverse() {
}
或前面使用enumerate
for (index, item) in data.enumerate() {
}
注意上面所有的for-in
循环也可以写成forEach
:
data.indices.forEach {
}