iOS 获取可采用KVC为对象赋值的keys

获取可采用KVC为对象赋值的keys

有时候为了解耦,需要使用KVC来为对象赋值.那么就需要判断想要赋值的key是否能够赋值给对象.
其实这个问题说来也简单,只需要两步:

1.获取对象的属性列表
2.遍历属性列表,查看key是否包含其中(可用NSSet取交集)

代码:

/**
 *  获取允许为类赋值的关键字数组
 */
- (NSSet *)allowedPropertyNamesFromNames:(NSArray *)names InClass:(Class)aClass{
    //想要赋值的keys
    NSMutableSet *namesSet = [NSMutableSet setWithArray:names];
    //允许赋值的keys
    NSMutableSet *allowedNamesSet = [NSMutableSet set];

    //获取属性列表
    unsigned int count;
    objc_property_t *properties = class_copyPropertyList(aClass, &count);
    for(int i = 0; i < count; i++)
    {
        objc_property_t property = properties[i];

        NSString *name = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
        [allowedNamesSet addObject:name];

    }  
    free(properties);

    //取交集
    [namesSet intersectSet:allowedNamesSet];

   return namesSet;
}

注意

1.需要#import "objc/runtime.h"
2.class_copyPropertyList 获取到的属性列表,不包括父类属性.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值