获取可采用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 获取到的属性列表,不包括父类属性.