Swift的JSON数据建模

时间:2016-08-30 15:03:59

标签: ios json swift model

我正在尝试像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

相同的目标

1 个答案:

答案 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