MJProperty.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // MJProperty.h
  3. // MJExtensionExample
  4. //
  5. // Created by MJ Lee on 15/4/17.
  6. // Copyright (c) 2015年 小码哥. All rights reserved.
  7. // 包装一个成员属性
  8. #import <Foundation/Foundation.h>
  9. #import <objc/runtime.h>
  10. #import "MJPropertyType.h"
  11. #import "MJPropertyKey.h"
  12. /**
  13. * 包装一个成员
  14. */
  15. @interface MJProperty : NSObject
  16. /** 成员属性 */
  17. @property (nonatomic, assign) objc_property_t property;
  18. /** 成员属性的名字 */
  19. @property (nonatomic, readonly) NSString *name;
  20. /** 成员属性的类型 */
  21. @property (nonatomic, readonly) MJPropertyType *type;
  22. /** 成员属性来源于哪个类(可能是父类) */
  23. @property (nonatomic, assign) Class srcClass;
  24. /**** 同一个成员属性 - 父类和子类的行为可能不一致(originKey、propertyKeys、objectClassInArray) ****/
  25. /** 设置最原始的key */
  26. - (void)setOriginKey:(id)originKey forClass:(Class)c;
  27. /** 对应着字典中的多级key(里面存放的数组,数组里面都是MJPropertyKey对象) */
  28. - (NSArray *)propertyKeysForClass:(Class)c;
  29. /** 模型数组中的模型类型 */
  30. - (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c;
  31. - (Class)objectClassInArrayForClass:(Class)c;
  32. /**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/
  33. /**
  34. * 设置object的成员变量值
  35. */
  36. - (void)setValue:(id)value forObject:(id)object;
  37. /**
  38. * 得到object的成员属性值
  39. */
  40. - (id)valueForObject:(id)object;
  41. /**
  42. * 初始化
  43. */
  44. + (instancetype)cachedPropertyWithProperty:(objc_property_t)property;
  45. @end