swift Model by ObjectMapper

前言

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末钦铁,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子才漆,更是在濱河造成了極大的恐慌牛曹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醇滥,死亡現場離奇詭異黎比,居然都是意外死亡,警方通過查閱死者的電腦和手機鸳玩,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門阅虫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人不跟,你說我怎么就攤上這事颓帝。” “怎么了窝革?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵购城,是天一觀的道長。 經常有香客問我虐译,道長瘪板,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任漆诽,我火速辦了婚禮侮攀,結果婚禮上锣枝,老公的妹妹穿的比我還像新娘。我一直安慰自己兰英,他們只是感情好撇叁,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箭昵,像睡著了一般税朴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上家制,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天正林,我揣著相機與錄音,去河邊找鬼颤殴。 笑死觅廓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的涵但。 我是一名探鬼主播杈绸,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矮瘟!你這毒婦竟也來了瞳脓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤澈侠,失蹤者是張志新(化名)和其女友劉穎劫侧,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體哨啃,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡烧栋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了拳球。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片审姓。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祝峻,靈堂內的尸體忽然破棺而出魔吐,到底是詐尸還是另有隱情,我是刑警寧澤莱找,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布酬姆,位于F島的核電站,受9級特大地震影響宋距,放射性物質發(fā)生泄漏轴踱。R本人自食惡果不足惜症脂,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一谚赎、第九天 我趴在偏房一處隱蔽的房頂上張望淫僻。 院中可真熱鬧,春花似錦壶唤、人聲如沸雳灵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悯辙。三九已至,卻和暖如春迎吵,著一層夾襖步出監(jiān)牢的瞬間躲撰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工击费, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拢蛋,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓蔫巩,卻偏偏與公主長得像谆棱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子圆仔,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容