2016-09-04 2 views
0

ここで私の検索のほとんどは無駄であることを証明しています。私のガード・ステートメントは、各値をチェックし、ゼロであれば修正します。しかし、値のうちの2つがnilなら、予期せずnilを見つけてクラッシュし、オプションのラップを解除します。スウィフトガードステートメントを使用して複数の値がゼロでないことを確認する方法はありますか?スウィフトガードに関する複数の値の確認?

func protectInput() { 

    guard Double(myAmount.text!) != nil else { 
     myAmount.text = "0.00" 
     return 
    } 

    guard Double(myRate.text!) != nil else { 
     myRate.text = "0.00" 
     return 
    } 

    guard Double(myFee.text!) != nil else { 
     myFee.text = "0.00" 
     return 
    } 
} 

私は完全に間違ったトラックにいるかもしれませんが、例の助けがあれば分かります。私は取り入れることができるすべてを読みました。私は2つの値を比較する必要はありませんまたはいくつかの複雑な比較を持っています。

答えて

1

ここでは、Guardのステートメントは適切ではありません。いずれかが失敗した場合、関数から戻り、後のステートメントは実行されません。したがって、myAmountに有効な値がない場合は、myRateとmyFeeを決して修正しません。

if Double(myAmount.text ?? "") == nil { 
    myAmount.text = "0.00" 
} 

このパターンは、より良いあなたに合うでしょう:

  • をテキスト値が1クラッシュの可能性を防ぐことができますされ、任意のより多くの開封を強制されていません - ??は、いずれかのテキストを使用しますnilを合体演算子であります値、またはこの場合は空の文字列
  • 戻り値がないので、関数はすべての値をチェックします。
+0

実際の問題を解決していただきありがとうございます。これは2つの値がnilのときに機能するので、なぜ3つがnilでないとうまくいかないのでしょうか?はい、しかし、目的を理解するための新しい質問... – Chilly

+0

あなたはクラッシュが起こっている場所は明確ではありませんでした - 私はそれがあなたがここで調整していた値に依存していたどこか他の場所だと仮定しました。 – jrturton

+0

クラッシュがどこで起こっているのかわからない場合は、例外ブレークポイントを追加すると、正確な行で停止するので、デバッグに多く役立ちます。 – jrturton

関連する問題