2016-08-30 9 views
0

SwiftのJSONデータモデリングをJSONModelのようにしようとしています。あなたのモデルが何であれ、それはフェッチされたJSONによって作成されます。誰も私を同じ方向に導くことができますか?
私は私がMirror(reflecting:)を使用して、クラスのプロパティのリストを取得していますされて最初のやっているが、モデルはこのようであれば -スウィフトのJSONデータモデリング

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クラスのものではありません。 Personインスタンスのみが渡された場合でも、場所のプロパティを取得するにはどうすればいいですか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を書きました。

関連する問題