2016-09-23 12 views
0

私はSwiftを初めて使い、forループ変数を処理するためのエレガントな方法を見つけようとしています。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

前に停止し、反復処理する必要がある場合

2番目の例は0から開始し、count-1で終了します

関連する問題