2017-05-30 8 views
0

私は単純な電卓のアプリケーションのためのこれらのコード行に出くわしました。オプションではない変数のラップを解除しますか?

func processOperation (operation: Operation) { 
    if currentOperation != Operation.Empty { 
     if runningNumber != "" { 
      rightValStr = runningNumber 
      runningNumber = "" 

      if currentOperation == Operation.Multiply { 
       result = "\(Double(leftValStr)! * Double(rightValStr)!)" 
      } else if currentOperation == Operation.Divide { 
       result = "\(Double(leftValStr)!/Double(rightValStr)!)" 
      } else if currentOperation == Operation.Subtract { 
       result = "\(Double(leftValStr)! - Double(rightValStr)!)" 
      } else if currentOperation == Operation.Add { 
       result = "\(Double(leftValStr)! + Double(rightValStr)!)" 
      } 

leftValStrvar leftValStr = ""

rightValStrとして宣言されても、私が使用してどのような目的を疑問に思ってvar rightValStr =""

として宣言されています "!"で\(Double(leftValStr)!/Double(rightValStr)!)ですか? 私が知っていることから、 "!"オプションのアンラップ用です。ここのleftValStrとrightValStrはオプションとして宣言されていないので、なぜそれらをアンラップする必要がありますか? leftValStrrightValStrがoptionalsない場合でも

答えて

0

、あなたはDouble(leftValStr)Double(rightValStr)をアンラップ力と値はnilすることができ文字列でダブルを初期化した結果です。

たとえば、stackoverflow文字列でDoubleを初期化することはできません。

あなたは、この変換結果は、あなたが例えば、アンラップ力を避けるためにif letを使用することができます正しいことを確認したい場合は、次の

if let leftValDouble = Double(leftValStr) { 
    // do your code 
} else { 
    // handle error 
} 

、あなたが強制する場合nil値のラップを解除することを覚えて、あなたのしてくださいコードがクラッシュします。使用している

+0

結果がnullの場合、強制アンラッピングを使用する必要がありますか? – Frankie

+0

@Frankieいいえ、結果がnilで展開されていない場合は、コードがクラッシュします。 Appleのドキュメントのガイダンス、オプションで作業する方法、最初に参照してください。 – user3441734

+0

これらの値は、** valid ** numbers only - 条件付きでyesですが、いくつかの値や他のシナリオを貼り付ける場合は、例えば 'if let'を使用して結果を確認する必要があります。そしてユニットテストを書くことを覚えておいてください。これは完璧なユースケースです。 – KlimczakM

0

Double初期化子は、すなわち、それはDoubleを作成したり、nilを返すことがあります、failable初期化子です。例

ダブルは、ここでは( "3")、 "3" Doubleに変換することができるので、「3

ダブル(に対応するオプションDouble値を返しますabc ")ここでは" abc "はDoubleに変換できないので、この場合はnilを返します。あなたのコードで

、あなたはまた、それ故に、それはnilを返し、Doubleに変換することができませんダブル(「」)を、使用しています。

force unwrapnilの値を入力すると、実行時例外が発生します。

したがって、Double(leftValStr)!は実行時例外を引き起こします。

お試しください!存在しないオプション値にアクセスすると、 ランタイムエラーが発生します。使用する前にオプションに以外の値が含まれていないことを必ず確認してください。その値を強制的にアンラップします。

+0

あなたの答えをありがとう@PGDev – Frankie

+0

答えが役に立つのを知った場合、upvotingを検討してください。 – PGDev

+0

私は投票率が15未満であるので、投票は記録されます。申し訳ありません:( – Frankie

関連する問題