runtime学习之 model 转dict

-(NSDictionary *) dictionary{

    unsigned int outCount = 0;

    objc_property_t *propertyList = class_copyPropertyList([self class], &outCount);


    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    for(int i = 0; i < outCount; i++){

        objc_property_t property = propertyList[i];

        const char * propertyName = property_getName(property);

        SEL getter = sel_registerName(propertyName);

        if ([self respondsToSelector:getter]) {

           NSString *type =  [NSString stringWithUTF8String:property_getAttributes(property)];

            NSLog(@"type:%@",type);

            if ([type hasPrefix:@"Ti"]) {

              int value = ((int(*)(id,SEL))objc_msgSend)(self,getter);

                NSString *key = [NSString stringWithUTF8String:propertyName];

                [dict setObject:[NSNumber numberWithInt:value] forKey:key];

                NSLog(@"key:%@,value:%d",key,value);

            }else{

               id value=((id(*)(id,SEL))objc_msgSend)(self,getter);

                if ([value isKindOfClass:[self class]] && value) {

                    value = [value dictionary];

                }

                if (value) {

                    NSString *key = [NSString stringWithUTF8String:propertyName];

                    [dict setObject:value forKey:key];

                    

                    NSLog(@"key:%@,value:%@",key,value);

                }

            }

        }

    

    }

    return dict;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值