LKS_CustomAttrModificationHandler.m 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #ifdef SHOULD_COMPILE_LOOKIN_SERVER
  2. //
  3. // LKS_CustomAttrModificationHandler.m
  4. // LookinServer
  5. //
  6. // Created by likaimacbookhome on 2023/11/4.
  7. //
  8. #import "LKS_CustomAttrModificationHandler.h"
  9. #import "LKS_CustomAttrSetterManager.h"
  10. #import "UIColor+LookinServer.h"
  11. @implementation LKS_CustomAttrModificationHandler
  12. + (BOOL)handleModification:(LookinCustomAttrModification *)modification {
  13. if (!modification || modification.customSetterID.length == 0) {
  14. return NO;
  15. }
  16. switch (modification.attrType) {
  17. case LookinAttrTypeNSString: {
  18. NSString *newValue = modification.value;
  19. if (newValue != nil && ![newValue isKindOfClass:[NSString class]]) {
  20. // nil 是合法的
  21. return NO;
  22. }
  23. LKS_StringSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getStringSetterWithID:modification.customSetterID];
  24. if (!setter) {
  25. return NO;
  26. }
  27. setter(newValue);
  28. return YES;
  29. }
  30. case LookinAttrTypeDouble: {
  31. NSNumber *newValue = modification.value;
  32. if (![newValue isKindOfClass:[NSNumber class]]) {
  33. return NO;
  34. }
  35. LKS_NumberSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getNumberSetterWithID:modification.customSetterID];
  36. if (!setter) {
  37. return NO;
  38. }
  39. setter(newValue);
  40. return YES;
  41. }
  42. case LookinAttrTypeBOOL: {
  43. NSNumber *newValue = modification.value;
  44. if (![newValue isKindOfClass:[NSNumber class]]) {
  45. return NO;
  46. }
  47. LKS_BoolSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getBoolSetterWithID:modification.customSetterID];
  48. if (!setter) {
  49. return NO;
  50. }
  51. setter(newValue.boolValue);
  52. return YES;
  53. }
  54. case LookinAttrTypeUIColor: {
  55. LKS_ColorSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getColorSetterWithID:modification.customSetterID];
  56. if (!setter) {
  57. return NO;
  58. }
  59. NSArray<NSNumber *> *newValue = modification.value;
  60. if (newValue == nil) {
  61. // nil 是合法的
  62. setter(nil);
  63. return YES;
  64. }
  65. if (![newValue isKindOfClass:[NSArray class]]) {
  66. return NO;
  67. }
  68. UIColor *color = [UIColor lks_colorFromRGBAComponents:newValue];
  69. if (!color) {
  70. return NO;
  71. }
  72. setter(color);
  73. return YES;
  74. }
  75. case LookinAttrTypeEnumString: {
  76. NSString *newValue = modification.value;
  77. if (![newValue isKindOfClass:[NSString class]]) {
  78. return NO;
  79. }
  80. LKS_EnumSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getEnumSetterWithID:modification.customSetterID];
  81. if (!setter) {
  82. return NO;
  83. }
  84. setter(newValue);
  85. return YES;
  86. }
  87. case LookinAttrTypeCGRect: {
  88. NSValue *newValue = modification.value;
  89. if (![newValue isKindOfClass:[NSValue class]]) {
  90. return NO;
  91. }
  92. LKS_RectSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getRectSetterWithID:modification.customSetterID];
  93. if (!setter) {
  94. return NO;
  95. }
  96. setter(newValue.CGRectValue);
  97. return YES;
  98. }
  99. case LookinAttrTypeCGSize: {
  100. NSValue *newValue = modification.value;
  101. if (![newValue isKindOfClass:[NSValue class]]) {
  102. return NO;
  103. }
  104. LKS_SizeSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getSizeSetterWithID:modification.customSetterID];
  105. if (!setter) {
  106. return NO;
  107. }
  108. setter(newValue.CGSizeValue);
  109. return YES;
  110. }
  111. case LookinAttrTypeCGPoint: {
  112. NSValue *newValue = modification.value;
  113. if (![newValue isKindOfClass:[NSValue class]]) {
  114. return NO;
  115. }
  116. LKS_PointSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getPointSetterWithID:modification.customSetterID];
  117. if (!setter) {
  118. return NO;
  119. }
  120. setter(newValue.CGPointValue);
  121. return YES;
  122. }
  123. case LookinAttrTypeUIEdgeInsets: {
  124. NSValue *newValue = modification.value;
  125. if (![newValue isKindOfClass:[NSValue class]]) {
  126. return NO;
  127. }
  128. LKS_InsetsSetter setter = [[LKS_CustomAttrSetterManager sharedInstance] getInsetsSetterWithID:modification.customSetterID];
  129. if (!setter) {
  130. return NO;
  131. }
  132. setter(newValue.UIEdgeInsetsValue);
  133. return YES;
  134. }
  135. default:
  136. return NO;
  137. }
  138. }
  139. @end
  140. #endif /* SHOULD_COMPILE_LOOKIN_SERVER */