這是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!)
複製代碼