我是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) {
答案 0 :(得分:0)
假设你的意思是&#34;如果它是否定的,那么什么也不做,&#34; (这不是显而易见的;你可能意味着&#34;减少,&#34;这就是为什么如果它不是一个例外它将是不明确的)你想要的语法是:
for i in 0..<max(0, loop) { }
这在必要时是一个很好的语法,但在大多数情况下,如果该值可能出乎意料地为负,那么您在程序结构中会遇到更深层次的问题,应该尽快解决问题。
答案 1 :(得分:0)
是的,你想要的结果并不明显。 如果你只需要迭代,无论是否负面
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
结束