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