私はSwift langを学んでおり、他の人の意見を聞くのに最適なことの1つは、「JSON応答からモデルを処理する方法」です。たとえば-
私が持っています User.Swift
モデル:
class User: NSObject {
var user_token:String?
var email:String?
}
また、Obj-Cプロジェクトと同じように KeyValueObjectMapping を使用したいと思います。残念ながら、これはここでは機能しません。
let parser = DCKeyValueObjectMapping.mapperForClass(User)
let user = parser.parseDictionary(data.objectForKey("user") as NSDictionary) as User
println(user.user_token) // returns nil
Swiftでモデルをどのように作成しますか?
コード生成を使用して、JSONに基づいてSwiftでモデルを生成することをお勧めします。そのために、 http://www.guideluxeでツールを作成しました。 .com/JsonToSwift を使用して、JSONのモデリングと解析を可能な限り簡単にします。
クラス名を含むサンプルJSONオブジェクトをツールに送信すると、対応するSwiftクラス、および必要な補助Swiftクラス、サンプルJSONによって暗示される構造を表します。また、NSJSONSerialization.JSONObjectWithDataメソッドを利用するものを含むSwiftオブジェクトを設定するために使用されるクラスメソッドも含まれています。NSArrayおよびNSDictionaryからの必要なマッピングオブジェクトが提供されます。
生成されたコードをSwift class(es)としてプロジェクトにコピーした後、ツールに提供されたサンプルと一致するJSONを含むNSDataオブジェクトを提供するだけで済みます。
Foundation以外に、依存関係はありません。
テストするJSONファイルからNSDataオブジェクトを作成する方法は次のとおりです。
let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!
SwiftyJSONModel を使用することをお勧めします。モデルは次のようになります。
import SwiftyJSONModel
class User: NSObject, JSONObjectInitializable {
enum PropertyKey : String {
case user_token, email
}
var user_token:String?
var email:String?
required init(object: JSONObject<PropertyKey>) throws {
user_token = object.value(for: .user_token)
email = object.value(for: .email)
}
}
このライブラリには3つの優れた点があります。
String
にキャストする必要はありません。enum
にカプセル化されています。これにより、キーを入力したときに自動補完が行われ、列挙型にないキーにアクセスできないことが保証されます。これは、モデルクラスとライブラリなしでJSON応答を解析するためのサンプルコードです。
モデルクラス
class User: NSObject{
var user_token: String = ""
var email: String = ""
}
WebサービスAPIと解析を呼び出すためのサンプルコード。
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
var err: NSError
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
//println("Result : \(jsonResult)")
let model = User()
model. user_token = jsonResult["user_token"] as NSString
model. email = jsonResult["email"] as NSString
})
私が使用しているのは jsoncafe SwiftyJSON、Codable、Gloss、Simpleなどのさまざまなフレームワークを備えた最も簡単でカスタマイズ可能なテンプレートベースモデルクラスジェネレーターSwift Classでも、独自のテンプレートを作成できます
より厳密なアプローチが必要で、JSONドキュメントのメタディスクリプションとしてJSONスキーマにアクセスできる場合は、それらを処理できるコードジェネレーターを作成しました(JSONスキーマ、ドラフト4)。
https://github.com/werner77/MappableObjectGenerator
私のツールは、コード生成テンプレートに基づいているため、基本的にすべてのプログラミング言語をサポートしていますが、現在、ObjectiveCとSwift 4のサポートに重点を置いています。
手遅れかもしれません。
リンクhttp://www.json4Swift.com/results.php
を使用することもできます。JSON値を貼り付けるだけで、代わりにSwiftファイルが表示されます。