iOS 获取一个类的属性名称以及类型

通过<objc/runtime.h>实现,代码如下:

- (instancetype)init

{

    self = [super init];

    if (self) {

        // 获取所有的成员变量

        unsigned int  outCount = 0;

        Ivar * varList = class_copyIvarList([self class], &outCount);

        

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

            Ivar ivar = varList[i];

            //1.获取成员变量名字

             NSString *ivarname = [NSString stringWithUTF8String:ivar_getName(ivar)];

            if ([ivarname hasPrefix:@"_"]) {

               //把 _ 去掉,读取后面的

                ivarname = [ivarname substringFromIndex:1];

            }

            //2.获取成员变量类型

            NSString * ivartype = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];

            //把包含 @\" 的去掉,如 "@\"nsstring\"";-="">

            NSString * ivarType = [ivartype stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"@\""]];

            NSLog(@"ivarType=%@,ivarname=%@",[self typeWithIvarType:ivarType],ivarname);

        }

    }

    return self;

}

-(NSString*)typeWithIvarType:(NSString*)ivarType{

    NSString * typeString = @"";

    if(![ivarType isKindOfClass:[NSString class]]){

        return typeString;

    }

    if([ivarType isEqualToString:@"i"]){

        typeString = @"int";

    }else if([ivarType isEqualToString:@"f"]){

        typeString = @"float";

    }else if([ivarType isEqualToString:@"d"]){

        typeString = @"double|CGFloat";

    }else if([ivarType isEqualToString:@"q"]){

         typeString = @"NSInteger";

    }else if([ivarType isEqualToString:@"B"]){

         typeString = @"BOOL";

    }else{

        typeString = ivarType;

    }

    return typeString;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值