swift、AnyObjectとダウンキャスト
型にAnyObjectを宣言すると、
String型でもInt型でも扱う事ができます。
使用例
var hogeArray:[AnyObject] = [] hogeArray.append(20 as AnyObject) hogeArray.append("新垣結衣" as AnyObject)
使用例
var user = Dictionary<String, AnyObject>() user = ["name": "aragaki" as AnyObject, "age": 20 as AnyObject]
しかし、何でも入れられるAnyObjectは、
ただのAnyObject型であって
String型でもInt型でもないのです。
つまりこうなる
var num:AnyObject = 10 var sum = num * 2 //=> numはAnyObject型なのでIntとして計算できないのでエラー
そこでダウンキャストをしてやる。
ダウンキャストとは、大きなくくりの中から、ひとつのくくりに絞って設定してやること。
- 哺乳類というくくりから人間を設定してやる。
- 哺乳類というくくりからライオンを設定してやる。
という概念です。
AnyObject型はString型もInt型を内包しているので、
- AnyObject(哺乳類)からString型(人間)にダウンキャスト
- AnyObject(哺乳類)からInt型(ライオン)にダウンキャスト
って感じです。
こうします
AnyObject型の値 as! ダウンキャストしたい型
利用例
var num:AnyObject = 10 num as! Int