SwiftでDictionaryを扱う方法について。

Dictionaryの生成と初期化

key、value共にStringのDictionaryの場合。

var dict1: [String: String] = [
    "key1" : "value1",
    "key2" : "value2"
]

空のDictionaryとして生成する場合。

var dict2 = [String: String]()

valueはどんな型が入るかわからない場合。

var dict3: [String: AnyObject] = [
    "key1" : "value1",
    "key2" : 2
]

値を取り出し変数に代入する

valueの型がStringで絶対にnilじゃないという場合。最後に!をつけます。

var str1: String = dict1["key1"]!

もしnilだった場合、「fatal error: unexpectedly found nil while unwrapping an Optional value」となりクラッシュします。

Stringかnilかわからない場合は、変数をString?で宣言し、Dictionaryも最後に?をつけます。

var str3: String? = dict1["key3"]?

また、以下はコンパイルエラーです。dict1のvalueはStringとして宣言しているので、Intであるはずがないとコンパイラが判断します。

var int1: Int = dict2["key1"]!

valueがAnyObjectのときはasを使って取り出す型を明示します。

Stringとわかっている場合。asの後ろに!が付くことに注意。

var str1: String = dict3["key1"] as! String

Stringかnilどちらかの場合。asの後ろに?が付くことに注意。

var str1: String? = dict3["key1"] as? String

as?で取り出そうとすると、値がnilでなくとも型が違う場合はnilになります。

// dict3["key2"]はInt型で2が入っている。
var str: String? = dict3["key2"] as? String
// strはnilとなる。

Dictionaryへ値を代入する

dict1["key3"] = "value3";