swift——原生的Data與Dictionary互轉的方法,及Model自定義

這是Dictionary轉Data 的方法json

源碼:數組

func jsonToData(jsonDic:Dictionary<String, Any>) -> Data? {

    if (!JSONSerialization.isValidJSONObject(jsonDic)) {

        print("is not a valid json object")

        return nil

}

    //利用自帶的json庫轉換成Data

    //若是設置options爲JSONSerialization.WritingOptions.prettyPrinted,則打印格式更好閱讀

    let data = try? JSONSerialization.data(withJSONObject: jsonDic, options: [])

    //Data轉換成String打印輸出

    let str = String(data:data!, encoding: String.Encoding.utf8)

    //輸出json字符串

    print("Json Str:\(str!)")

    return data

}

複製代碼

這是Data轉Dictionary, 上面是首先判斷可否轉換成功,下面用的do catch。bash

源碼:ui

func dataToDictionary(data:Data) ->Dictionary<String, Any>?{

    do{

        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)

        let dic = json as! Dictionary<String, Any>

        return dic

    }catch _ {

        print("失敗")

        return nil

    }

}
複製代碼

首先由於是本身寫的Demo,因此先定義Dictionary,轉爲Data,而後再轉成Dictionary。 定義好你須要的變量,也就是成員,而後將解析出來的Dictionary的key定義爲一個數組(例子中就是我定義的Dictionary的key,實際項目中就是你獲得的返回值對應的key),再將你與之相對應的變量定義爲一個數組,順序要對應上。而後遍歷數組並賦值spa

Model源碼:code

class testModel:NSObject{

    var name:String!

    var age:String!

    var sex:String!

    convenience init(dic:Dictionary<String, Any>){

        self.init()    

        let arr1 = ["姓名","年齡","性別"]

        let arr2 = ["name","age","sex"]

        for (index, value) in arr1.enumerated() {

            self.setValue(dic[value], forKey: arr2[index])

        }

    }

}

複製代碼

處理這些以後調用就很簡單了,傳入Dictionary就搞定了全部的賦值。這樣子的Model一樣適用於第三方庫解析出來的數據,例如SwiftJSON,區別只是傳入的字典類型改成JSON。字符串

let dic = dataToDictionary(data:data)
  let model = testModel.init(dic: dic!)
複製代碼
相關文章
相關標籤/搜索