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

来源:互联网 发布:java内部类例子ppt 编辑:程序博客网 时间:2024/06/05 03:06

获取可采用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
原创粉丝点击