2016-12-15 9 views
-7

私は非常に迅速なプログラミングに新しい。私は迅速に基本的なプログラムを書いている。アンラップされたオプションのコンセプトについては混乱しています。このプログラムでは、既定では、摂氏と華氏をアンラップされたオプションとして宣言しています。私の質問は迅速なプログラミングで暗黙的にアンラップされたオプションを使用するにはどうすればよいですか?

なぜ私たちはcelsius.textとして再度ラップする必要がありますか?

あなたは、このためのソリューションを提供してくださいすることができます...あなたは非オプションUITextFieldを持っているが、そのプロパティtextString?タイプで、あなたのようにそれをアンラップしなければなりません

PROGRAM CODE

+5

あなたの質問にはコードを載せて、画像にはリンクしないでください! – rckoenes

+3

ここにオプションの説明がありますhttp://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift – Ponja

+1

[ソース]から学んでください(https://developer.apple.com /library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID330)。 Swiftのマニュアルは非常によく書かれており、簡単に従うことができます。 //コードの*画像*を決して投稿しないでください。これは意味がありません。質問には常にコード自体をテキストとして投稿してください。 [編集]ボタンを使用してコードを追加します。 – Moritz

答えて

2

ありがとう:

if let text = celsius.text { 
    print(text) 
} 
+0

または、あなたはちょうど使用することができます!もしあなたがそのことを確信しているなら。テキストはnilではありません – Ponja

+0

'UITextField'は非オプション' IBOutlet'として宣言されていますが、 'UITextField'の' text'プロパティは 'String?'オプションです。したがって、 'text'値にアクセスするには、オプションのun-wrapを行う必要があります。 –

0

celsiusfahrenheitの定義を含める必要があります。

私はそれらがUITextFieldまたはUITextViewのオブジェクトであると推測しています。

これらの2つのビュータイプは、オプションとして宣言されているプロパティtextを持っています。したがって、オプションの文字列への参照を含むテキストフィールドへのオプションの参照があります。

あなたが暗黙的に開封され、オプションとして変数を宣言すると、いつでもあなたのため、危険であることを

celsius.text? = "" 

注意を言う必要があるので、あなたがcelsius: UITextField!としてcelsiusを宣言していても、textプロパティは、また、任意ですその変数を参照すると、コンパイラはあなたのためにそれをアンラップしようとします(これはオプションですが、私を信じて、決してゼロにならないでしょう)。これは、ボタンを押してドアを開くエレベータのようなものです車はそこにいるかどうか、あなたは見ることなく通り抜けます。車がそこにいるなら、偉大な、そうでなければ、あなたはあなたの死に落ちます。再!

アウトレットは、IB(Interface Builder)でアウトレットを接続する必要があるため、暗黙的に宣言されたオプションを使用するのが一般的です。コンセントが接続されていない場合はすぐにそれについて知りたいので、クラッシュは妥当です。

!演算子を「nilのクラッシュ」演算子と考え、オプションを実際に理解するまでは避けてください。 (上記のアウトレットを除いて)

0

あなたはそうすることができます。オプションでforce unwrapping(!演算子)を使用しないようにしてください。

func conversion() { 

    if (celsius.text == "") { 
     if let fahrenheitText = fahrenheit.text, let fahrenheitValue = Double(fahrenheitText) { 
      let celsiusValue = fahrenheitValue - 32 * 5/9 //or whatever is the formula.. 
      celsius.text = "\(celsiusValue)" 
      fahrenheit.text = "" 
     } 
    } else if (fahrenheit.text == "") { 
     if let celsiusText = celsius.text, let celsiusValue = Double(celsiusText) { 
      let fahrenheitValue = 9 * celsiusValue/5 + 32 //or whatever is the formula.. 
      fahrenheit.text = "\(fahrenheitValue)" 
      celsius.text = "" 
     } 
    } 

} 
関連する問題