我正在尝试像JSONModel一样在Swift中进行JSON数据建模。意味着你的模型是什么,它将由获取的JSON填充。任何人都可以指导我朝同一方向发展吗?
我首先要做的是使用Mirror(reflecting:)
从类中获取属性列表,但如果模型是这样的 -
public class Person {
var name: String!
var age: Int!
var location: Location!
}
public class Location {
var street: String!
var city: String!
var country: String!
}
然后对于类Person我只获得属性[“name”,“age”,“location”]而不是Location
类的属性。如果只在Mirror(reflected:)
中传递了Person实例,我如何获得位置属性
我是否朝着正确的方向前进?如果我不是,请指导我。欢迎任何想法。 (我希望实现与JSONModel)
答案 0 :(得分:0)
您可以通过递归反射访问所有属性。
let location = Location()
location.street = "Nt. 12"
location.city = "Chicago"
location.country = "US"
let person = Person()
person.name = "Peter"
person.age = 25
person.location = location
func traverseAllProperties(object: Any) {
let mirror = Mirror(reflecting: object)
if mirror.displayStyle == .class || mirror.displayStyle == .struct {
mirror.children.forEach({ (child) in
print(child.label ?? "")
traverseAllProperties(object: child.value)
})
} else if mirror.displayStyle == .optional {
if let value = mirror.children.first?.value {
traverseAllProperties(object: value)
}
} else if mirror.displayStyle == .enum {
mirror.children.forEach({ (child) in
traverseAllProperties(object: child.value)
})
}
}
traverseAllProperties(object: person)
打印:
name
age
location
street
city
country
我以这种方式写了HandyJSON。