酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Swiftでリフレクションを使ってインスタンスからプロパティの一覧を取得する

Swiftでインスタンスからプロパティの一覧を取得してみましょう。以下のようなPersonクラスがあるとします。

@objc(Person)
class Person : NSObject {
    let age: Int
    let name: String
    
    required init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
}

reflectメソッドを使ってオブジェクトに定義されているプロパティの一覧を取得します。

let object = Person(age: 17, name: "さくさん")
        
var r = reflect(object)
for var i = 0; i < r.count; i++ {
     let name: String = r[i].0
     let type: Any.Type = r[i].1.valueType
            
     println("\(name): \(type)")
}

出力:
super: rockinonTests.Person
age: Swift.Int
name: Swift.String

インスタンスの内容をダンプする

プロパティの一覧を取得するという目的とは若干異なりますが、dumpメソッドを使うことでインスタンスの内容を出力させることができます。

let object = Person(age: 17, name: "さくさん")
dump(object)

出力:
▿ rockinonTests.Person #0
  - super: <Person: 0x7ff57bc59a20>
  - age: 17
  - name: さくさん