如何在swift(Reflection/Mirror)中动态查找属性的类型?

P. *_*ami 5 reflection ios swift

所以,假设我有一个这样的类:

class Employee: NSObject {
    var id: String?
    var someArray: [Employee]?
}
Run Code Online (Sandbox Code Playgroud)

我使用反射来获取属性名称:

let employee = Employee()
let mirror = Mirror(reflecting: employee)
propertyNames = mirror.children.flatMap { $0.label } 
// ["businessUnitId", "someArray"]
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好!现在我需要能够找出每个属性的类型,所以如果我这样做employee.valueForKey("someArray"),它将无法工作,因为它只给我AnyObject类型.最好的方法是什么?特别是对于数组,我需要能够动态地告诉数组包含类型Employee.

Luc*_*tti 14

你不需要继承NSObject(除非你有充分的理由).

class Employee {
    var id: String?
    var someArray: [Employee]?
}

let employee = Employee()

for property in Mirror(reflecting: employee).children {
    print("name: \(property.label) type: \(type(of: property.value))")
}
Run Code Online (Sandbox Code Playgroud)

产量

name: Optional("id") type: Optional<String>
name: Optional("someArray") type: Optional<Array<Employee>>
Run Code Online (Sandbox Code Playgroud)

这也适用于Structs

  • 这正是我想要的! (2认同)