2016-08-30 56 views
0

我想在Swift中做一個JSON數據建模,如JSONModel。意思是無論你的模型是什麼,它都會被提取的JSON填充。任何人都可以在相同的方向引導我嗎?
我在做什麼首先是我獲取使用Mirror(reflecting:)從類屬性的列表中,但如果模型是這樣的 -JSON數據建模Swift

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類,我只獲得性能[「名稱」,「年齡「,」地點「],而不是那些Location類。我如何才能獲得位置的屬性,如果只有個人實例通過Mirror(reflected:)
我對此有正確的方向嗎?或者如果我不是,請指導我。任何想法都歡迎。 (我想完成與JSONModel相同的目標)

回答

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