MOThemeModel.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. //
  2. // MOThemeModel.m
  3. //
  4. // Created by 青天 猫 on 2025/2/21
  5. // Copyright (c) 2025 __MyCompanyName__. All rights reserved.
  6. //
  7. #import "MOThemeModel.h"
  8. NSString *const kMOThemeModelCountryColorOn = @"countryColorOn";
  9. NSString *const kMOThemeModelMainGift = @"mainGift";
  10. NSString *const kMOThemeModelSlideBackgroundMessage = @"slideBackgroundMessage";
  11. NSString *const kMOThemeModelSearchFamily = @"searchFamily";
  12. NSString *const kMOThemeModelMainMain = @"mainMain";
  13. NSString *const kMOThemeModelSearchPk = @"searchPk";
  14. NSString *const kMOThemeModelMainMe = @"mainMe";
  15. NSString *const kMOThemeModelSearchWealth = @"searchWealth";
  16. NSString *const kMOThemeModelMeUsernameColor = @"meUsernameColor";
  17. NSString *const kMOThemeModelMainMeOn = @"mainMeOn";
  18. NSString *const kMOThemeModelCountryBgColor = @"countryBgColor";
  19. NSString *const kMOThemeModelMainSearch = @"mainSearch";
  20. NSString *const kMOThemeModelMainMainOn = @"mainMainOn";
  21. NSString *const kMOThemeModelMainSearchOn = @"mainSearchOn";
  22. NSString *const kMOThemeModelCountryBgColorOn = @"countryBgColorOn";
  23. NSString *const kMOThemeModelSlideBackgroundSearch = @"slideBackgroundSearch";
  24. NSString *const kMOThemeModelMainIsDynamic = @"mainIsDynamic";
  25. NSString *const kMOThemeModelMainMessage = @"mainMessage";
  26. NSString *const kMOThemeModelTitleBottom = @"titleBottom";
  27. NSString *const kMOThemeModelTitleColor = @"titleColor";
  28. NSString *const kMOThemeModelCountryColor = @"countryColor";
  29. NSString *const kMOThemeModelSearchIncome = @"searchIncome";
  30. NSString *const kMOThemeModelTitleColorOn = @"titleColorOn";
  31. NSString *const kMOThemeModelIsOpen = @"isOpen";
  32. NSString *const kMOThemeModelSkinVersion = @"skinVersion";
  33. NSString *const kMOThemeModelMainBackground = @"mainBackground";
  34. NSString *const kMOThemeModelSlideBackgroundMe = @"slideBackgroundMe";
  35. NSString *const kMOThemeModelMainMessageOn = @"mainMessageOn";
  36. NSString *const kMOThemeModelSlideBackgroundMain = @"slideBackgroundMain";
  37. NSString *const kMOThemeModelMainPlay = @"mainPlay";
  38. @interface MOThemeModel ()
  39. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
  40. @end
  41. @implementation MOThemeModel
  42. @synthesize countryColorOn = _countryColorOn;
  43. @synthesize mainGift = _mainGift;
  44. @synthesize slideBackgroundMessage = _slideBackgroundMessage;
  45. @synthesize searchFamily = _searchFamily;
  46. @synthesize mainMain = _mainMain;
  47. @synthesize searchPk = _searchPk;
  48. @synthesize mainMe = _mainMe;
  49. @synthesize searchWealth = _searchWealth;
  50. @synthesize meUsernameColor = _meUsernameColor;
  51. @synthesize mainMeOn = _mainMeOn;
  52. @synthesize countryBgColor = _countryBgColor;
  53. @synthesize mainSearch = _mainSearch;
  54. @synthesize mainMainOn = _mainMainOn;
  55. @synthesize mainSearchOn = _mainSearchOn;
  56. @synthesize countryBgColorOn = _countryBgColorOn;
  57. @synthesize slideBackgroundSearch = _slideBackgroundSearch;
  58. @synthesize mainIsDynamic = _mainIsDynamic;
  59. @synthesize mainMessage = _mainMessage;
  60. @synthesize titleBottom = _titleBottom;
  61. @synthesize titleColor = _titleColor;
  62. @synthesize countryColor = _countryColor;
  63. @synthesize searchIncome = _searchIncome;
  64. @synthesize titleColorOn = _titleColorOn;
  65. @synthesize isOpen = _isOpen;
  66. @synthesize skinVersion = _skinVersion;
  67. @synthesize mainBackground = _mainBackground;
  68. @synthesize slideBackgroundMe = _slideBackgroundMe;
  69. @synthesize mainMessageOn = _mainMessageOn;
  70. @synthesize slideBackgroundMain = _slideBackgroundMain;
  71. @synthesize mainPlay = _mainPlay;
  72. - (NSDictionary *)getAllProperties {
  73. NSMutableDictionary *props = [NSMutableDictionary dictionary];
  74. unsigned int outCount;
  75. objc_property_t *properties = class_copyPropertyList([self class], &outCount);
  76. for (int i = 0; i < outCount; i++) {
  77. objc_property_t property = properties[i];
  78. NSString *propertyName = @(property_getName(property));
  79. id propertyValue = [self valueForKey:propertyName];
  80. if (propertyValue) {
  81. [props setObject:propertyValue forKey:propertyName];
  82. } else {
  83. // 如果值为空,可以根据需求设置为 NSNull 或跳过
  84. [props setObject:[NSNull null] forKey:propertyName];
  85. }
  86. }
  87. free(properties);
  88. return props;
  89. }
  90. + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict {
  91. return [[self alloc] initWithDictionary:dict];
  92. }
  93. - (instancetype)initWithDictionary:(NSDictionary *)dict {
  94. self = [super init];
  95. // This check serves to make sure that a non-NSDictionary object
  96. // passed into the model class doesn't break the parsing.
  97. if (self && [dict isKindOfClass:[NSDictionary class]]) {
  98. self.countryColorOn = [self objectOrNilForKey:kMOThemeModelCountryColorOn fromDictionary:dict];
  99. self.mainGift = [self objectOrNilForKey:kMOThemeModelMainGift fromDictionary:dict];
  100. self.slideBackgroundMessage = [self objectOrNilForKey:kMOThemeModelSlideBackgroundMessage fromDictionary:dict];
  101. self.searchFamily = [self objectOrNilForKey:kMOThemeModelSearchFamily fromDictionary:dict];
  102. self.mainMain = [self objectOrNilForKey:kMOThemeModelMainMain fromDictionary:dict];
  103. self.searchPk = [self objectOrNilForKey:kMOThemeModelSearchPk fromDictionary:dict];
  104. self.mainMe = [self objectOrNilForKey:kMOThemeModelMainMe fromDictionary:dict];
  105. self.searchWealth = [self objectOrNilForKey:kMOThemeModelSearchWealth fromDictionary:dict];
  106. self.meUsernameColor = [self objectOrNilForKey:kMOThemeModelMeUsernameColor fromDictionary:dict];
  107. self.mainMeOn = [self objectOrNilForKey:kMOThemeModelMainMeOn fromDictionary:dict];
  108. self.countryBgColor = [self objectOrNilForKey:kMOThemeModelCountryBgColor fromDictionary:dict];
  109. self.mainSearch = [self objectOrNilForKey:kMOThemeModelMainSearch fromDictionary:dict];
  110. self.mainMainOn = [self objectOrNilForKey:kMOThemeModelMainMainOn fromDictionary:dict];
  111. self.mainSearchOn = [self objectOrNilForKey:kMOThemeModelMainSearchOn fromDictionary:dict];
  112. self.countryBgColorOn = [self objectOrNilForKey:kMOThemeModelCountryBgColorOn fromDictionary:dict];
  113. self.slideBackgroundSearch = [self objectOrNilForKey:kMOThemeModelSlideBackgroundSearch fromDictionary:dict];
  114. self.mainIsDynamic = [[self objectOrNilForKey:kMOThemeModelMainIsDynamic fromDictionary:dict] boolValue];
  115. self.mainMessage = [self objectOrNilForKey:kMOThemeModelMainMessage fromDictionary:dict];
  116. self.titleBottom = [self objectOrNilForKey:kMOThemeModelTitleBottom fromDictionary:dict];
  117. self.titleColor = [self objectOrNilForKey:kMOThemeModelTitleColor fromDictionary:dict];
  118. self.countryColor = [self objectOrNilForKey:kMOThemeModelCountryColor fromDictionary:dict];
  119. self.searchIncome = [self objectOrNilForKey:kMOThemeModelSearchIncome fromDictionary:dict];
  120. self.titleColorOn = [self objectOrNilForKey:kMOThemeModelTitleColorOn fromDictionary:dict];
  121. self.isOpen = [[self objectOrNilForKey:kMOThemeModelIsOpen fromDictionary:dict] boolValue];
  122. self.skinVersion = [[self objectOrNilForKey:kMOThemeModelSkinVersion fromDictionary:dict] doubleValue];
  123. self.mainBackground = [self objectOrNilForKey:kMOThemeModelMainBackground fromDictionary:dict];
  124. self.slideBackgroundMe = [self objectOrNilForKey:kMOThemeModelSlideBackgroundMe fromDictionary:dict];
  125. self.mainMessageOn = [self objectOrNilForKey:kMOThemeModelMainMessageOn fromDictionary:dict];
  126. self.slideBackgroundMain = [self objectOrNilForKey:kMOThemeModelSlideBackgroundMain fromDictionary:dict];
  127. self.mainPlay = [self objectOrNilForKey:kMOThemeModelMainPlay fromDictionary:dict];
  128. }
  129. return self;
  130. }
  131. - (NSDictionary *)dictionaryRepresentation {
  132. NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
  133. [mutableDict setValue:self.countryColorOn forKey:kMOThemeModelCountryColorOn];
  134. [mutableDict setValue:self.mainGift forKey:kMOThemeModelMainGift];
  135. [mutableDict setValue:self.slideBackgroundMessage forKey:kMOThemeModelSlideBackgroundMessage];
  136. [mutableDict setValue:self.searchFamily forKey:kMOThemeModelSearchFamily];
  137. [mutableDict setValue:self.mainMain forKey:kMOThemeModelMainMain];
  138. [mutableDict setValue:self.searchPk forKey:kMOThemeModelSearchPk];
  139. [mutableDict setValue:self.mainMe forKey:kMOThemeModelMainMe];
  140. [mutableDict setValue:self.searchWealth forKey:kMOThemeModelSearchWealth];
  141. [mutableDict setValue:self.meUsernameColor forKey:kMOThemeModelMeUsernameColor];
  142. [mutableDict setValue:self.mainMeOn forKey:kMOThemeModelMainMeOn];
  143. [mutableDict setValue:self.countryBgColor forKey:kMOThemeModelCountryBgColor];
  144. [mutableDict setValue:self.mainSearch forKey:kMOThemeModelMainSearch];
  145. [mutableDict setValue:self.mainMainOn forKey:kMOThemeModelMainMainOn];
  146. [mutableDict setValue:self.mainSearchOn forKey:kMOThemeModelMainSearchOn];
  147. [mutableDict setValue:self.countryBgColorOn forKey:kMOThemeModelCountryBgColorOn];
  148. [mutableDict setValue:self.slideBackgroundSearch forKey:kMOThemeModelSlideBackgroundSearch];
  149. [mutableDict setValue:[NSNumber numberWithBool:self.mainIsDynamic] forKey:kMOThemeModelMainIsDynamic];
  150. [mutableDict setValue:self.mainMessage forKey:kMOThemeModelMainMessage];
  151. [mutableDict setValue:self.titleBottom forKey:kMOThemeModelTitleBottom];
  152. [mutableDict setValue:self.titleColor forKey:kMOThemeModelTitleColor];
  153. [mutableDict setValue:self.countryColor forKey:kMOThemeModelCountryColor];
  154. [mutableDict setValue:self.searchIncome forKey:kMOThemeModelSearchIncome];
  155. [mutableDict setValue:self.titleColorOn forKey:kMOThemeModelTitleColorOn];
  156. [mutableDict setValue:[NSNumber numberWithBool:self.isOpen] forKey:kMOThemeModelIsOpen];
  157. [mutableDict setValue:[NSNumber numberWithDouble:self.skinVersion] forKey:kMOThemeModelSkinVersion];
  158. [mutableDict setValue:self.mainBackground forKey:kMOThemeModelMainBackground];
  159. [mutableDict setValue:self.slideBackgroundMe forKey:kMOThemeModelSlideBackgroundMe];
  160. [mutableDict setValue:self.mainMessageOn forKey:kMOThemeModelMainMessageOn];
  161. [mutableDict setValue:self.slideBackgroundMain forKey:kMOThemeModelSlideBackgroundMain];
  162. [mutableDict setValue:self.mainPlay forKey:kMOThemeModelMainPlay];
  163. return [NSDictionary dictionaryWithDictionary:mutableDict];
  164. }
  165. - (NSString *)description {
  166. return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
  167. }
  168. #pragma mark - Helper Method
  169. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict {
  170. id object = [dict objectForKey:aKey];
  171. return [object isEqual:[NSNull null]] ? nil : object;
  172. }
  173. #pragma mark - NSCoding Methods
  174. - (id)initWithCoder:(NSCoder *)aDecoder {
  175. self = [super init];
  176. self.countryColorOn = [aDecoder decodeObjectForKey:kMOThemeModelCountryColorOn];
  177. self.mainGift = [aDecoder decodeObjectForKey:kMOThemeModelMainGift];
  178. self.slideBackgroundMessage = [aDecoder decodeObjectForKey:kMOThemeModelSlideBackgroundMessage];
  179. self.searchFamily = [aDecoder decodeObjectForKey:kMOThemeModelSearchFamily];
  180. self.mainMain = [aDecoder decodeObjectForKey:kMOThemeModelMainMain];
  181. self.searchPk = [aDecoder decodeObjectForKey:kMOThemeModelSearchPk];
  182. self.mainMe = [aDecoder decodeObjectForKey:kMOThemeModelMainMe];
  183. self.searchWealth = [aDecoder decodeObjectForKey:kMOThemeModelSearchWealth];
  184. self.meUsernameColor = [aDecoder decodeObjectForKey:kMOThemeModelMeUsernameColor];
  185. self.mainMeOn = [aDecoder decodeObjectForKey:kMOThemeModelMainMeOn];
  186. self.countryBgColor = [aDecoder decodeObjectForKey:kMOThemeModelCountryBgColor];
  187. self.mainSearch = [aDecoder decodeObjectForKey:kMOThemeModelMainSearch];
  188. self.mainMainOn = [aDecoder decodeObjectForKey:kMOThemeModelMainMainOn];
  189. self.mainSearchOn = [aDecoder decodeObjectForKey:kMOThemeModelMainSearchOn];
  190. self.countryBgColorOn = [aDecoder decodeObjectForKey:kMOThemeModelCountryBgColorOn];
  191. self.slideBackgroundSearch = [aDecoder decodeObjectForKey:kMOThemeModelSlideBackgroundSearch];
  192. self.mainIsDynamic = [aDecoder decodeBoolForKey:kMOThemeModelMainIsDynamic];
  193. self.mainMessage = [aDecoder decodeObjectForKey:kMOThemeModelMainMessage];
  194. self.titleBottom = [aDecoder decodeObjectForKey:kMOThemeModelTitleBottom];
  195. self.titleColor = [aDecoder decodeObjectForKey:kMOThemeModelTitleColor];
  196. self.countryColor = [aDecoder decodeObjectForKey:kMOThemeModelCountryColor];
  197. self.searchIncome = [aDecoder decodeObjectForKey:kMOThemeModelSearchIncome];
  198. self.titleColorOn = [aDecoder decodeObjectForKey:kMOThemeModelTitleColorOn];
  199. self.isOpen = [aDecoder decodeBoolForKey:kMOThemeModelIsOpen];
  200. self.skinVersion = [aDecoder decodeDoubleForKey:kMOThemeModelSkinVersion];
  201. self.mainBackground = [aDecoder decodeObjectForKey:kMOThemeModelMainBackground];
  202. self.slideBackgroundMe = [aDecoder decodeObjectForKey:kMOThemeModelSlideBackgroundMe];
  203. self.mainMessageOn = [aDecoder decodeObjectForKey:kMOThemeModelMainMessageOn];
  204. self.slideBackgroundMain = [aDecoder decodeObjectForKey:kMOThemeModelSlideBackgroundMain];
  205. self.mainPlay = [aDecoder decodeObjectForKey:kMOThemeModelMainPlay];
  206. return self;
  207. }
  208. - (void)encodeWithCoder:(NSCoder *)aCoder
  209. {
  210. [aCoder encodeObject:_countryColorOn forKey:kMOThemeModelCountryColorOn];
  211. [aCoder encodeObject:_mainGift forKey:kMOThemeModelMainGift];
  212. [aCoder encodeObject:_slideBackgroundMessage forKey:kMOThemeModelSlideBackgroundMessage];
  213. [aCoder encodeObject:_searchFamily forKey:kMOThemeModelSearchFamily];
  214. [aCoder encodeObject:_mainMain forKey:kMOThemeModelMainMain];
  215. [aCoder encodeObject:_searchPk forKey:kMOThemeModelSearchPk];
  216. [aCoder encodeObject:_mainMe forKey:kMOThemeModelMainMe];
  217. [aCoder encodeObject:_searchWealth forKey:kMOThemeModelSearchWealth];
  218. [aCoder encodeObject:_meUsernameColor forKey:kMOThemeModelMeUsernameColor];
  219. [aCoder encodeObject:_mainMeOn forKey:kMOThemeModelMainMeOn];
  220. [aCoder encodeObject:_countryBgColor forKey:kMOThemeModelCountryBgColor];
  221. [aCoder encodeObject:_mainSearch forKey:kMOThemeModelMainSearch];
  222. [aCoder encodeObject:_mainMainOn forKey:kMOThemeModelMainMainOn];
  223. [aCoder encodeObject:_mainSearchOn forKey:kMOThemeModelMainSearchOn];
  224. [aCoder encodeObject:_countryBgColorOn forKey:kMOThemeModelCountryBgColorOn];
  225. [aCoder encodeObject:_slideBackgroundSearch forKey:kMOThemeModelSlideBackgroundSearch];
  226. [aCoder encodeBool:_mainIsDynamic forKey:kMOThemeModelMainIsDynamic];
  227. [aCoder encodeObject:_mainMessage forKey:kMOThemeModelMainMessage];
  228. [aCoder encodeObject:_titleBottom forKey:kMOThemeModelTitleBottom];
  229. [aCoder encodeObject:_titleColor forKey:kMOThemeModelTitleColor];
  230. [aCoder encodeObject:_countryColor forKey:kMOThemeModelCountryColor];
  231. [aCoder encodeObject:_searchIncome forKey:kMOThemeModelSearchIncome];
  232. [aCoder encodeObject:_titleColorOn forKey:kMOThemeModelTitleColorOn];
  233. [aCoder encodeBool:_isOpen forKey:kMOThemeModelIsOpen];
  234. [aCoder encodeDouble:_skinVersion forKey:kMOThemeModelSkinVersion];
  235. [aCoder encodeObject:_mainBackground forKey:kMOThemeModelMainBackground];
  236. [aCoder encodeObject:_slideBackgroundMe forKey:kMOThemeModelSlideBackgroundMe];
  237. [aCoder encodeObject:_mainMessageOn forKey:kMOThemeModelMainMessageOn];
  238. [aCoder encodeObject:_slideBackgroundMain forKey:kMOThemeModelSlideBackgroundMain];
  239. [aCoder encodeObject:_mainPlay forKey:kMOThemeModelMainPlay];
  240. }
  241. - (id)copyWithZone:(NSZone *)zone {
  242. MOThemeModel *copy = [[MOThemeModel alloc] init];
  243. if (copy) {
  244. copy.countryColorOn = [self.countryColorOn copyWithZone:zone];
  245. copy.mainGift = [self.mainGift copyWithZone:zone];
  246. copy.slideBackgroundMessage = [self.slideBackgroundMessage copyWithZone:zone];
  247. copy.searchFamily = [self.searchFamily copyWithZone:zone];
  248. copy.mainMain = [self.mainMain copyWithZone:zone];
  249. copy.searchPk = [self.searchPk copyWithZone:zone];
  250. copy.mainMe = [self.mainMe copyWithZone:zone];
  251. copy.searchWealth = [self.searchWealth copyWithZone:zone];
  252. copy.meUsernameColor = [self.meUsernameColor copyWithZone:zone];
  253. copy.mainMeOn = [self.mainMeOn copyWithZone:zone];
  254. copy.countryBgColor = [self.countryBgColor copyWithZone:zone];
  255. copy.mainSearch = [self.mainSearch copyWithZone:zone];
  256. copy.mainMainOn = [self.mainMainOn copyWithZone:zone];
  257. copy.mainSearchOn = [self.mainSearchOn copyWithZone:zone];
  258. copy.countryBgColorOn = [self.countryBgColorOn copyWithZone:zone];
  259. copy.slideBackgroundSearch = [self.slideBackgroundSearch copyWithZone:zone];
  260. copy.mainIsDynamic = self.mainIsDynamic;
  261. copy.mainMessage = [self.mainMessage copyWithZone:zone];
  262. copy.titleBottom = [self.titleBottom copyWithZone:zone];
  263. copy.titleColor = [self.titleColor copyWithZone:zone];
  264. copy.countryColor = [self.countryColor copyWithZone:zone];
  265. copy.searchIncome = [self.searchIncome copyWithZone:zone];
  266. copy.titleColorOn = [self.titleColorOn copyWithZone:zone];
  267. copy.isOpen = self.isOpen;
  268. copy.skinVersion = self.skinVersion;
  269. copy.mainBackground = [self.mainBackground copyWithZone:zone];
  270. copy.slideBackgroundMe = [self.slideBackgroundMe copyWithZone:zone];
  271. copy.mainMessageOn = [self.mainMessageOn copyWithZone:zone];
  272. copy.slideBackgroundMain = [self.slideBackgroundMain copyWithZone:zone];
  273. copy.mainPlay = [self.mainPlay copyWithZone:zone];
  274. }
  275. return copy;
  276. }
  277. @end