前言
ObjectMapper是一個基于Swfit語言實現JSON和Model間互轉的第三方開源類庫
git傳送門:https://github.com/Hearst-DD/ObjectMapper
ps:經使用發(fā)現痹届,每次都需要手動生成ObjectMapper的model進行decode JSON數據,挺麻煩的隐孽,所以就自己寫了個簡單的model code打印工具類????
JSON model print helper
生成一個名字為ModelPrint_Z的工具類介褥,包含了這個工具的使用步驟tip
import UIKit
//使用tip:
//1脑题、新建一個swift文件摇展,設置名字為SwiftModelName
//2洋闽、使用本工具類阐污,調用 ModelPrint_Z.PrintByString(dict_str: jsonString, name: "SwiftModelName")
//3休涤、run the project,然后打印臺會打印對應的model實現方法代碼
//4笛辟、copy打印的代碼
//5功氨、parse到SwiftModelName的model即可(覆蓋全部model類內全部代碼)
class ModelPrint_Z{
//dict_str為model的字典json string
//name為model的名稱
static func PrintByString(dict_str:NSString,name:NSString){
let dict=self.dictionaryWithJosnString(jsonString: dict_str)
if (dict != nil) {
print("\n\n\n\n\nimport UIKit\nimport ObjectMapper\n")
self.Print(dict: dict!, name: name)
}else{
print("error:json數據檢索失敗手幢!")
}
}
//dict為json的字典形式
//name為model的名稱
static func Print(dict:NSDictionary,name:NSString){
//model code string 疊加
var var_str:String=""
var var_mapping:String=""
dict.enumerateKeysAndObjects({ (key, obj, stop) in
let key_str=key as! String
var_mapping.append("\n"+key_str+" <- map[\""+key_str+"\"]")
switch obj{
case is Int:
var_str.append("\nvar "+key_str+" : "+"Int?")
case is Double:
var_str.append("\nvar "+key_str+" : "+"Double?")
case is Bool:
var_str.append("\nvar "+key_str+" : "+"Bool?")
case is String:
var_str.append("\nvar "+key_str+" : "+"String?")
case is NSDictionary:
self.Print(dict: (obj as! NSDictionary),name: key_str as NSString)
case is NSArray:
var_str.append("\nvar "+key_str+" : "+"["+(name as String)+"List"+"]?")
let arr = obj as! NSArray
if arr.count>0{
self.Print(dict: arr[0] as! NSDictionary,name: (name as String)+"List" as NSString)
}
default:
var_str.append("\nvar "+key_str+" : "+"Any?")
}
})
var_str="class "+(name as String)+": Mappable {\n"+var_str+"\n\npublic required init?(map: Map) {\nmapping(map: map)\n}"
var_mapping="\nfunc mapping(map: Map) {"+var_mapping+"\n}\n}"
//model code str
print("\n\n\n"+var_str+"\n"+var_mapping)
}
//設置類型為靜態(tài)方法
//string專成dictionaryWithJosnString
static func dictionaryWithJosnString(jsonString:NSString)->NSDictionary?{
let jsonData:Data=jsonString.data(using: String.Encoding.utf8.rawValue)!
if jsonData.isEmpty {
return nil
}else{
do {
let jsonResult = try JSONSerialization.jsonObject(with: jsonData, options:
JSONSerialization.ReadingOptions.mutableContainers)
return jsonResult as? NSDictionary
} catch {
return nil
}
}
}
}
調用model code打印
import ObjectMapper
//model數據打印助手
ModelPrint_Z.PrintByString(dict_str: JSONStr name: "AdModel")
//使用Mapper初始化model
let temperature = Mapper<AdModel>().map(JSONString: JSONStr as String)
生成的model例子捷凄,model生成是根據ObjectMapper的model規(guī)則
import UIKit
import ObjectMapper
class AdModelList: Mappable {
var relation_id : Int?
var id : Int?
var image_url : String?
var title : String?
var link_url : String?
var relation_type : Int?
var relative_url : String?
public required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
relation_id <- map["relation_id"]
id <- map["id"]
image_url <- map["image_url"]
title <- map["title"]
link_url <- map["link_url"]
relation_type <- map["relation_type"]
relative_url <- map["relative_url"]
}
}
class AdModel: Mappable {
var success : Bool?
var list : [AdModelList]?
public required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
success <- map["success"]
list <- map["list"]
}
}
ObjectMapper使用步驟
1、按ObjectMapper生成model
2围来、調用ObjectMapper的decode方法即可跺涤,如下
let temperature = Mapper<AdModel>().map(JSONString: JSONStr as String)
總結
第一次使用這種打印方式去幫助生成model,如果同學
們有更好的方式去生成model管钳,歡迎一起交流:p