Iterar sobre las properties estáticas de una estructura

¿Hay una manera simple de iterar sobre todas las properties de una estructura? El enfoque para las properties no estáticas con las que estoy familiarizado es usar Mirror , pero esto devuelve una matriz vacía cuando la estructura contiene solo properties estáticas. Aquí hay un ejemplo de lo que trato de lograr:

struct Tree { static let bark = "Bark" static let roots = "Roots" } let treeParts = [String]() // insert code here to make treeParts = ["Bark", "Roots"] 

Como también tengo interés en cómo hacer esto, hice el siguiente ejemplo. ¿Por qué no simplemente crear la estructura con properties no estáticas más una variable de instancia estática que hace que la estructura sea un singleton. El siguiente ejemplo de código detalla un caso de uso de ejemplo para asignar valores de un object Person a un dictionary JSON utilizando la semántica de nomenclatura de la API REST. Los nombres de propiedad de PersonJSONKeys deben coincidir con los nombres de propiedad de Person .

El código para la function allProperties() proviene de Cómo hacer un ciclo sobre properties de estructura en Swift? . Puede modificar esta function fácilmente para devolver solo los valores de las properties de una estructura.

 struct PersonJSONKeys: PropertyLoopable { static let instance: PersonJSONKeys = PersonJSONKeys() private init() {} let name = "name" let firstName = "first_name" let age = "age" } struct Person: PropertyLoopable { let name = "Doe" let firstName = "John" let age = "18" } let person = Person() let personProperties = person.allProperties() var personJSON: [String:Any] = [:] for jsonProperty in PersonJSONKeys.instance.allProperties() { let propertyName = jsonProperty.key let jsonKey = jsonProperty.value as! String personJSON[jsonKey] = personProperties[propertyName] } 

Dado que el Struct es ahora un singleton, todas sus properties se inicializarán solo una vez y la security del hilo está dada por su variable de instancia estática.