iterar sobre atributos de class de object no Swift

Existe uma maneira simples no Swift para iterar sobre os atributos de uma class.

ou seja, eu tenho uma class Person e ela tem 3 atributos: name, lastname, age.

existe algo como

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

a saída seria por exemplo:

 name: Bob lastname: Max age: 20 

Eles removeram a reflection dentro do Swift 2.0. É assim que estou enumerando atributos e valores.

 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 after for (index, attr) in mirrored_object.children.enumerated() { if let property_name = attr.label as String! { print("Attr \(index): \(property_name) = \(attr.value)") } } 

Saída:
Attr 0: name = nome do usuário
Attr 1: last_name = sobrenome do usuário
Attr 2: age = 20

Sim, se você só precisa imprimir propriedades de uma struct ou class, e as propriedades são tipos simples como String e Int, você pode usar reflect e MirrorType .

 func print_properties(mirror: MirrorType) { for i in 0.. 

Se você tiver estruturas aninhadas, enums, precisará fazer um pouco mais de trabalho.

A Apple não removeu a reflect , apenas a alterou para _reflect , eles também alteraram o MirrorType para _MirrorType .
A versão Swift 2.0 do código do @Teemu Kurppa:

 func print_properties(mirror: _MirrorType) { for i in 0.. 

Como sugerido @mohacs, você pode fornecer uma descrição de function em sua class necessária como segue;

 func description() -> String{ let mirrored_object = Mirror(reflecting: self) let str:NSMutableString = NSMutableString() for (index, attr) in mirrored_object.children.enumerated() { if let property_name = attr.label as String! { str.append(" Attr \(index): \(property_name) = \(attr.value)") } } //print("desc=\(str)") return str as String } 

Então, simples chame este método de instância

  let jsonOb:JsonModel = self.ObjArray[Index] print("jsonOb = \(jsonOb.description())")