iOS 获取可采用KVC为对象赋值的keys
2016-07-12 17:41
155 查看
获取可采用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 获取到的属性列表,不包括父类属性.
相关文章推荐
- DOM2非标准但却支持很好的几个属性小结
- Ruby简洁学习笔记(二):类继承、属性、类变量
- 举例讲解C#中自动实现的属性
- Delphi控件ListView的属性及使用方法详解
- C#实现获取不同对象中名称相同属性的方法
- PowerShell中Get-Date对象的常用属性和方法介绍
- Windows Powershell属性:描述对象是什么
- 详解C#中的属性和属性的使用
- 轻松学习C#的属性
- DIV+CSS经常用到的属性、参数及说明
- CSS 关于网页图片的属性
- Android中persistent属性用法详解
- C#实现ProperTyGrid自定义属性的方法
- C#属性(Attribute)用法实例解析
- C#使用shell32获取文件属性的方法
- JavaScript对象、属性、事件手册集合方便查询
- JavaScript原生对象之Number对象的属性和方法详解
- jQuery Attributes(属性)的使用(二、类篇)
- JavaScript常用对象的方法和属性小结
- 详解 javascript中offsetleft属性的用法