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的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!)
复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值