TDSModelHelper.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // TDSModelHelper.h
  3. // TDSCommon
  4. //
  5. // Created by Insomnia on 2020/10/20.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import <objc/runtime.h>
  9. #ifndef __TDSConst__
  10. #define __TDSConst__
  11. extern NSString *const TDSTypeInt;
  12. extern NSString *const TDSTypeFloat;
  13. extern NSString *const TDSTypeDouble;
  14. extern NSString *const TDSTypeLong;
  15. extern NSString *const TDSTypeLongLong;
  16. extern NSString *const TDSTypeChar;
  17. extern NSString *const TDSTypeBOOL;
  18. extern NSString *const TDSTypePointer;
  19. extern NSString *const TDSTypeIvar;
  20. extern NSString *const TDSTypeMethod;
  21. extern NSString *const TDSTypeBlock;
  22. extern NSString *const TDSTypeClass;
  23. extern NSString *const TDSTypeSEL;
  24. extern NSString *const TDSTypeId;
  25. #endif
  26. @interface TDSPropertyType : NSObject
  27. /** 类型标识符 */
  28. @property (nonatomic, copy) NSString *code;
  29. /** 是否为id类型 */
  30. @property (nonatomic, readonly, getter=isIdType) BOOL idType;
  31. /** 对象类型(如果是基本数据类型,此值为nil) */
  32. @property (nonatomic, readonly) Class typeClass;
  33. /** 类型是否来自于Foundation框架,比如NSString、NSArray */
  34. @property (nonatomic, readonly, getter = isFromFoundation) BOOL fromFoundation;
  35. /** 类型是否不支持KVC */
  36. @property (nonatomic, readonly, getter = isKVCDisabled) BOOL KVCDisabled;
  37. /**
  38. * 获得缓存的类型对象
  39. */
  40. + (instancetype)cachedTypeWithCode:(NSString *)code;
  41. @end
  42. @interface TDSProperty : NSObject
  43. /** 成员属性 */
  44. @property (nonatomic, assign) objc_property_t property;
  45. /** 成员属性名 */
  46. @property (nonatomic, readonly) NSString *name;
  47. /** 成员变量的类型 */
  48. @property (nonatomic, readonly) TDSPropertyType *type;
  49. /** 成员来源于哪个类(可能是父类) */
  50. @property (nonatomic, assign) Class srcClass;
  51. /**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/
  52. /** 对应着字典中的key */
  53. - (void)setKey:(NSString *)key forClass:(Class)c;
  54. - (NSString *)keyFromClass:(Class)c;
  55. /** 对应着字典中的多级key */
  56. - (NSArray *)keysFromClass:(Class)c;
  57. /** 模型数组中的模型类型 */
  58. - (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c;
  59. - (Class)objectClassInArrayFromClass:(Class)c;
  60. /**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/
  61. /**
  62. * 设置成员变量的值
  63. */
  64. - (void)setValue:(id)value forObject:(id)object;
  65. /**
  66. * 得到成员变量的值
  67. */
  68. - (id)valueFromObject:(id)object;
  69. /**
  70. * 初始化
  71. */
  72. + (instancetype)cachedPropertyWithProperty:(objc_property_t)property;
  73. @end