Is there a Simple way in Swift to iterate over the attributes of a class.
i.e. i have a class Person, and it has 3 attributes: name, lastname, age.
is there something like
for attribute in Person { println("\(attribute): \(attribute.value)") }
the output would be for example:
name: Bob lastname: Max age: 20
They have removed reflect within Swift 2.0. This is how I am enumerating attributes and values.
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)") } }
Output:
Attr 0: name = user name
Attr 1: last_name = user lastname
Attr 2: age = 20
Yes, if you just need to print properties of a struct or class, and the properties are simple types like String and Int, you can use reflect
and MirrorType
.
func print_properties(mirror: MirrorType) { for i in 0..<mirror.count { let (name, childMirror) = mirror[i] let value = childMirror.value println("\(i): \(name) = \(value)") } } struct Person { let first_name: String let last_name: String let age: Int } let john = Person(first_name:"John", last_name:"Doe", age:27) let mirror = reflect(john) print_properties(mirror)
If you have nested structs, enums, you need to do a bit more work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With