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

先贴上互转方法

这是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就是一开始你定义的。

然后关于Model,直接上图


定义好你需要的变量,也就是成员,然后将解析出来的Dictionary的key定义为一个数组(例子中就是我定义的Dictionary的key,实际项目中就是你得到的返回值对应的key),再将你与之相对应的变量定义为一个数组,顺序要对应上哟。然后遍历数组并赋值

源码:

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。



转载请注明出处,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容