Swiftでオブジェクトクラスの属性を反復処理する 質問する

Swiftでオブジェクトクラスの属性を反復処理する 質問する

Swift でクラスの属性を反復処理する簡単な方法はありますか。

つまり、Person クラスがあり、name、lastname、age という 3 つの属性があります。

のようなものはありますか

for attribute in Person {
     println("\(attribute): \(attribute.value)")
}

出力は例えば次のようになります。

name: Bob
lastname: Max
age: 20

ベストアンサー1

Swift 2.0 では reflect が削除されました。これが属性と値を列挙する方法です。

class People {
    var name = ""
    var last_name = ""
    var age = 0
}

var user = People()
user.name  = "user name"
user.last_name = "user lastname"
user.age = 20

let mirrored_object = Mirror(reflecting: user)

// Swift 2
for (index, attr) in mirrored_object.children.enumerate() {
    if let property_name = attr.label as String! {
        print("Attr \(index): \(property_name) = \(attr.value)")
    }
}

// Swift 3 and later
for (index, attr) in mirrored_object.children.enumerated() {
    if let property_name = attr.label as String! {
        print("Attr \(index): \(property_name) = \(attr.value)")
    }
}

出力:
属性 0: name = ユーザー名
属性 1: last_name = ユーザーの姓
属性 2: age = 20

おすすめ記事