2016-11-11 11 views
0

私はSwiftをしばらく使っていますが、まだ毎日optionalsの理解に苦しんでいます。私が現在把握するのが最も難しいことです。スウィフト - まだ表示されていない文字列はそのまま表示されます。

この「UserDefaults」値をアンラップして、「オプション()」環境を含まないようにするのに問題があります。

let tValues = def.string(forKey: "bgColor")!.components(separatedBy: " ") 
print(tValues) 
//print this: Optional(UIExtendedGrayColorSpace", "1", "1) 

defに読み取り値を

globals.defaults.set(String(describing: cardView.backgroundColor), forKey: "bgColor") 
print(String(describing: cardView.backgroundColor!)) 
//print this: UIExtendedGrayColorSpace 1 1 

を格納するUserDefaults.standardのインスタンスです。あなたが見ることができるように、私はそれを読むときに鍵をアンラップしています。そして私はそこでそれをやってみたのですが、代わりにprint(tValues)!に行ってみました。しかし、彼らは同じ結果を生み出します。

どうすればOptional()を取り除くことができますか?

+1

'backgroundColor'したがって、(記述:cardView.backgroundColor)を'文字列、*任意*プロパティである '文字列 "オプション(UIExtendedGrayColorSpace 1)" を与えます。デフォルトに保存するときは、色をアンラップしません。 –

+0

'String(description:cardView.backgroundColor)'を印刷するとオプションではありません。 _値を保存するセクションの私のコメントを参照してください – TheValyreanGroup

+2

*印刷*ステートメント(2行目)では、色をアンラップします。しかし、デフォルトの色に色を保存する最初の行にはありません。 –

答えて

1

スウィフトのnil値の可能性から私たちを保護するオプションがあります。あなたの頭を包み込むときや、時々対処するのに苦労するかもしれませんが、あなたのプログラムを壊すことから彼らを盾と考えることができます。 NEVER強制解除します。 があり、通常はが良い方法です。

UserDefaultsオブジェクトを安全にアンラッピングしてから印刷してください。このようなものはif letブロックを使用して動作するはずです。

if let tValues = def.string(forKey: "bgColor"){ //def.string(forKey: "bgColor") is now safely unwrapped print(tValues.components(separatedBy: " ")) }

関連する問題