swift3 模型转字典(JSON)

  项目中最近需要将一个复杂的对象转成JSON,于是就利用Mirror写了一个模型转字典的通用方法,应该可以满足大部分使用场景下的需求了

函数实现:

func convertToDictNesting(obj: Any, remainFeild: [String]? = nil, replace: (((label: String, value: Any)) -> (String, Any))? = nil) -> [String: Any] {
    var dict: [String: Any] = [:]
    var children: [Mirror.Child] = []
    if let superChildren = Mirror(reflecting: obj).superclassMirror?.children {
        children.append(contentsOf: superChildren)
    }
    children.append(contentsOf: Mirror(reflecting: obj).children)
    for child in children {
        if let key = child.label {
            if let remainFeild = remainFeild, !remainFeild.contains(key) {
                continue
            }
            let subMirror = Mirror(reflecting: child.value)
            if let displayStyle = subMirror.displayStyle, displayStyle == .optional {
                if subMirror.children.isEmpty {
                    continue
                }
            }
            //解析类型属性
            let subDict = convertToDictNesting(obj: child.value, remainFeild: remainFeild, replace: replace)
            if subDict.isEmpty {
                if let replaceReturn = replace?((key, child.value)) {
                    if !replaceReturn.0.isEmpty {
                        if let aryValue = replaceReturn.1 as? [Any] {
                            var dictAry: [Any] = []
                            for value in aryValue {
                                let subDict = convertToDictNesting(obj: value, remainFeild: remainFeild, replace: replace)
                                if subDict.isEmpty {
                                    dictAr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值