swift——原生的Data与Dictionary互转的方法,及Model自定义

3,385 阅读1分钟

这是Dictionary转Data 的方法

源码:

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。

源码:

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),再将你与之相对应的变量定义为一个数组,顺序要对应上。然后遍历数组并赋值

Model源码:

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!)