OKADA LABO

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