我对Swift很陌生,并试图找到一种优雅的方法来处理可能为负值的for循环变量。
func funForLoops(_ loop:Int) {
for i in 0..<loop {
print("Hello \(i)")
}
}
funForLoops(1) // prints Hello 0
funForLoops(0) // doesn't execute
funForLoops(-1) // runtime error "fatal error: Can't form Range with upperBound < lowerBound"是否有比这更简单的检查方法:
if (loop >= 0) {
for i in 0..<loop {
print("Hello \(i)")
}
}或者这个:
for i in 0..<(loop >= 0 ? loop : 0) {发布于 2016-09-23 03:34:20
假设您的意思是“如果它是负面的,什么都不做”(这并不明显;您可能意味着“减量”,这就是为什么如果它不是一个例外的话,它将是模棱两可的),您想要的语法是:
for i in 0..<max(0, loop) { }当有必要时,这是一个很好的语法,但是在大多数情况下,如果值可能是令人惊讶的负值,那么在程序的结构上有一个更深层次的问题,并且应该更早地解决这个问题。
发布于 2016-09-23 09:04:18
是啊,你想得到什么结果还不明显。如果你只需要迭代,不管是负的还是非负的
func forLoop(count: Int) {
for i in min(count, 0)..<max(0, count) {
print(i)
}
}或者更少的代码
func forLoop(count: Int) {
for i in 0..<abs(count) {
print(i)
}
}这里唯一的区别是,第一个示例将生成负值的输出,并在0之前停止。
第二个示例将从0开始,以count-1结束。
https://stackoverflow.com/questions/39652075
复制相似问题