IOS反射,swift反射,基础 MODEL转字典,字典转MODEL,根据下面的自己进行拓展

swift2.0中的反射,实现对象 字典相互转换

===========mrshan 2016.1.14

==========================

首先介绍一下Swift中的反射,在2.0中做了一定的修改,要获取它的运行时(Reflect),要对这个实例化对象调用Mirror方法比如:

class Dog{

var name = string()

var id = string()

}


==

let dogSmall = Dog()//实例化

var dogMirror = Mirror(reflecting:dogSmall)//获取这个dogsmall的反射信息


通过上面的方法,我们获取到了在运行时候实例dogsmall的一些信息,包括他有哪些值,以及这些数值对应的value

那么我们接下来就要给他做出循环,children就是这个 对象的属性-值 的一个数组,每一对是一个元组(label,value)

for eachItem in dogMirror.children {

let (label name,value) = eachItem

}

我们可以利用这个方法来将一个对象,转换成一个字典


=============================

代码示例:自己看吧、

class ReflectMrshan:NSObject{

    

    /**

    对象转换为字典,首先先打印出来,待会在实现STRING-DIC

    

    - parameter model: 对象

    

    - returns: 转化出来的字典

    */

    class func ModelToDic(model:AnyObject)->NSDictionary{

        let redic = NSMutableDictionary()

        let mirror: Mirror = Mirror(reflecting: model)

        for p in mirror.children{

            if(p.label! != ""){

                redic.setValue("\(p.value)", forKey: p.label!)

            }

        }

        return redic

    }

    

    /**

    字典转换为对象(最基础方法,循环嵌套,作对象数组,以及对象中的对象转换)

    

    - parameter dic:   字典

    - parameter model: 需要赋值的对象的实例

    */

    class func DicToModel(dic:Dictionary<String,String>,model:NSObject){

        /// 这里将字典中所有KEY    都转换为  STRING类型,目的只有一个运用 OBJ setValue方法,给 这个对象赋值

        /// 这就完成了,字典和对象的转换

        let mirrotwo:Mirror = Mirror(reflecting: dic)

        for p in mirrotwo.children {

            var (key,value) = (p.value as! (String,String))

            //循环出字典中的每一对key - value 都是String类型,然后将这个类型赋值给model

            //这一次遍历当前需要赋值对象的属性,是因为需要判断当前对象是否有这个属性,如果有才会给他赋值,如果没有就略过

            //mirrorModel是当前需要赋值的对象的反射对象,他的LABEL就是对象的属性,value就是数值,但是只读的,

            //所以只能通过model.setValue来赋值

            let mirrorModel = Mirror(reflecting: model)

            for eachItem in mirrorModel.children {

                if(eachItem.label! == key){

                    //这一步简直爆炸的方法

                    model.setValue(value, forKey: key)

                }

            }

        }

    }

    

    /**

    这个方法还没有实现

    这个方法是将对象转换为JSON字符串

    - parameter model: 需要处理的对象

    - returns: JOSN字符串

    */

    class func ModelToJson(model:NSObject)->String{

        let redic:NSString = ""

        let mirror: Mirror = Mirror(reflecting: model)

        for p in mirror.children{

            if(p.label! != ""){

                //print("\(p.label!)" + "___的数值是___" + "\(p.value)")

                redic.stringByAppendingString("\(p.label),\(p.label!)")

            }

        }

        return redic as String

    }


}

 =================

/// 一个测试类

class user:ReflectMrshan{

    var id:String!

    var name:String!

    var haha:String!


}

调用:

//这里是字典和对象的相互转换

        let testModel = user()

        user.DicToModel(["id":"no2","name":"missliu","haha":"god","last":"xixi"], model: testModel)//字典转对象

        var redic = user.ModelToDic(testModel)//对象转字典

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值