2016-09-23 36 views
0

我是Swift的新手,並試圖找到一種優雅的方式來處理可能爲負數的for循環變量。優雅的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

在你的意思是 「如果是負值,什麼也不做,」 假設(這是不明顯的;你可能意思是「遞減」,這就是爲什麼它不明確,如果它不是例外)你想要的語法是:

for i in 0..<max(0, loop) { } 

這是一個很好的語法,當它是必要的,但在大多數情況下,如果該值可能會出乎意料的消極,你在程序結構中存在更深層次的問題,應該儘快解決問題。

+0

謝謝!這正是我的意思 - 「如果它是消極的,什麼都不做」 –

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結束

相關問題