> For the complete documentation index, see [llms.txt](https://jacky-chen.gitbook.io/jackychen/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jacky-chen.gitbook.io/jackychen/dai-fen-lei/mirror.md).

# Mirror

* **可以把 class 內的屬性和值，用 foreach 的方式揭露出來**
* [**REFLECTION 和 MIRROR**](https://swifter.tips/reflect/)

```swift
import Foundation

@objcMembers
class People: NSObject {
    var name: String?
    var last_name: String?
    var age: String?
    var wallet: Wallet?
}

@objcMembers
class Wallet: NSObject
{
    var cash = 1000
    var credit = 2
}

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

let mirrored_object = Mirror(reflecting: user)

for (index, attr) in mirrored_object.children.enumerated()
{
    if let key = attr.label
    {
        print("Attr \(index): \(key) = \(attr.value)")
        user.setValue(nil, forKey: key)
    }
}

user.last_name
user.age
user.wallet
```
