kitoko552.memo

kitoko552のメモ

SwiftのAnyObjectとAny

SwiftのAnyObject型は、何かのクラスのインスタンスならなんでも扱うことができます。

class Human {
    var name: String
    
    init(name : String) {
        self.name = name
    }
}

class Phone {
    var maker: String
    
    init(maker : String) {
        self.maker = maker
    }
}

// 異なるクラスのインスタンスを格納できる。
let anyobject: [AnyObject] = [alice, iphone]

Any型はどんな型でも扱うことができます。

// どんな型でも格納できる。
let any: [Any] = [alice, 1, "hoge"]

いずれの場合も、正しくキャストすることで本来のインスタンスとして扱うことができるようになります。 このような場合には、switch文とキャスト(as)を組み合わせると便利です。 以下のように記述します。

for obj in any {
    switch obj {
    case let h as Human:
        println("Human: \(h.name)")
    case let i as Int:
        println("Int: \(i)")
    case let s as String:
        println("String: \(s)")
    default:
        println(obj)
    }
}

※この記事では以下の本を参考にしています。

詳解 Swift

詳解 Swift