2017-05-16 10 views
1

iOSプロジェクトでは、SwiftyJSONとObjectMapperを使用してJSON応答を解析し、モデルに格納しています。しかし、モデルでは、マッピングを手動で指定する必要があります。例えば;私はプロパティとして名前と年齢を持っているユーザーと呼ばれるモデルクラスを、持っている場合は、解析時に、私はUserクラスに次のように指定する必要があります。Swiftの一般化されたJSONパーサー

func mapping(map: Map) { 
     name <- map["Name"] 
     age <- map["Age"] 
    } 

すべてのモデルに同じことを行うことは面倒で時間がかかります。解析を一般化するアプローチはありませんか?私は関数に任意のJSONを渡し、モデルを指定すると、ファンクションは使用可能な場合、解析された値を持つモデルオブジェクトを返します。私はモデルごとに別々のマッピングを書いてはいけません。

+2

あなたはショートカットのショートカットが必要です! –

+0

これは、多数のモデルを持つプロジェクトにとって非常に役立ちます。私はAndroidのGsonのようなライブラリはすでに同じことをやっていると私は考えています。 – StudentX

答えて

1

あなたが探しているのは、Swift 3ライブラリEVReflectionです。

更新:(現在ベータ版で)

スウィフト4は、この質問に関連するいくつかの変更をもたらしているようです。

struct MyStruct: Codable { 
    var str: String 
    var num: Int 
} 

let myStruct = MyStruct(str: "test", num:5) 

let encoder = JSONEncoder() 
let jsonData = try encoder.encode(myStruct) 
let json = String(data: jsonData, encoding: .utf8) 

print(json) // prints {"str": "test", "num": 5} 

// Also decoding 

let decoder = JSONDecoder() 
let decoded = try decoder.decode(MyStruct.self, from: jsonData) 

// decoded is a structure of type MyStruct 

print(decoded.str) // test 
+0

これを使用すると、Swift 4のCodableでの作業がさらに簡単になります:https://github.com/evermeer/Stuff#codable

関連する問題