2017-02-25 5 views
0

こんにちは、私は素早く、いくつかの微妙な問題を解決しようとしています。つまり、私がコードを作成する前に、ここで私の理解を固めたいと思います。このコードを実行した後:辞書の値は自動的にオプションですか?

var content:[String:Double] = [:] 
content["swords"] = 12 
content["bows"] = 113 
content["swords"] = content["swords"] + 12 // problem line 

を私は、次を得る:

error: value of optional type 'Double?' not unwrapped;

これは、辞書内のすべての値がオプションであることを意味していますか?もしそれが真実ならば、値なしのキーだけを追加して印刷することができます。

var content:[String:Double] = [:] 
content["swords"] = 12 
content["bows"] = 113 
content["blade"] 
print(content["blade"]) 

、それが実際の印刷nilで行ったので、これは本当ですか?

答えて

0

2つの全く異なる問題があります。 2番目のコードでは、キー"blade"に値を割り当てないので、printの文ではnilと表示されます。

ライン:

content["blade"] 

は何も追加しません。実際にはそのキーの値にアクセスしようとします。

コードの最初のビットの問題は、実行時に特定のキーの値があるという保証がないため、任意の辞書ルックアップの値がオプションの値であるためです。

content["swords"] = content["swords"]! + 12 

をしかし、それをしない:

次の操作を行うことにより、コードを修正することができます。代わりに、安全にしてください:

if let swords = content["swords"] as? Double { 
    content["swords"] = swords + 12 
} 
0

キーが設定されていないと、辞書は通常nilを返します。あなたは値なしのキーを追加しなかったので、設定されていないキーを2回読み込んで、両方ともnilを返します(2度目は何もしません)。

+0

しかし、存在する場合の値はオプションです。 – Obito

+0

これは、未定義のキーがあるかどうかを確認する必要があることを知らせる方法です。はい、あります。 – Compufreak

関連する問題