我正在学习Swift lang,其中一个很好听到别人输入的内容是“你如何处理来自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中创建模型?
答案 0 :(得分:8)
我建议使用代码生成基于JSON在Swift中生成模型。为此,我在http://www.guideluxe.com/JsonToSwift创建了一个工具,以便尽可能简化建模和解析JSON。
在您将具有类名的示例JSON对象提交给工具之后,它将生成相应的Swift类以及任何所需的子Swift类,以表示示例JSON隐含的结构。还包括用于填充Swift对象的类方法,包括使用NSJSONSerialization.JSONObjectWithData方法的方法。提供了NSArray和NSDictionary对象的必要映射。
将生成的代码作为Swift类复制到项目中后,您只需提供一个包含JSON的NSData对象,该对象与提供给该工具的样本相匹配。
除了Foundation之外,没有依赖关系。
以下是如何从JSON文件创建NSData对象以使用。
进行测试let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!
答案 1 :(得分:5)
我建议使用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)
}
}
这个图书馆有三件好事:
String
,因为图书馆会推断出类型enum
中封装,当您键入密钥并确保无法访问密钥时,它会为您提供自动组合,而不是枚举答案 2 :(得分:2)
以下是Model Class的一些示例代码,并解析了任何库中的JSON响应。
模型类
class User: NSObject{
var user_token: String = ""
var email: String = ""
}
调用web-service api和Parsing的示例代码。
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
})
答案 3 :(得分:1)
我使用jsoncafe最简单且可自定义的模板基础模型类生成器,包括SwiftyJSON,Codable,Gloss,Simple Swift Class等不同的framwroks,即使你可以制作自己的模板
<强> jsoncafe.com 强>
答案 4 :(得分:0)
如果您想要一种更严格的方法并且可以访问JSON模式作为JSON文档的元描述,我编写了一个代码生成器来处理这些(JSON模式,草案4):
https://github.com/werner77/MappableObjectGenerator
我的工具基本上支持任何编程语言,因为它基于代码生成模板,但现在专注于ObjectiveC和Swift 4支持。
答案 5 :(得分:0)
可能为时已晚。
您也可以尝试使用链接
http://www.json4swift.com/results.php
您只需在其中粘贴JSON值,它就会为您提供快速文件。