MOLiveMemberData.m 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // MOLiveMemberData.m
  3. //
  4. // Created by SuperCabbage on 2023/11/23
  5. // Copyright (c) 2023 __MyCompanyName__. All rights reserved.
  6. //
  7. #import "MOLiveMemberData.h"
  8. #import "MOUserBase.h"
  9. NSString *const kMOLiveMemberDataNext = @"next";
  10. NSString *const kMOLiveMemberDataUserBase = @"list";
  11. NSString *const kMOLiveMemberDataVipMembers = @"vipMembers";
  12. NSString *const kMOLiveMemberDataMemberMembers = @"memberMembers";
  13. NSString *const kMOLiveMemberDataManageMembers = @"manageMembers";
  14. NSString *const kMOLiveMemberDataVipMembers2 = @"vipMember2";
  15. @interface MOLiveMemberData ()
  16. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
  17. @end
  18. @implementation MOLiveMemberData
  19. @synthesize next = _next;
  20. @synthesize userBase = _userBase;
  21. @synthesize vipMembers = _vipMembers;
  22. @synthesize memberMembers = _memberMembers;
  23. @synthesize manageMembers = _manageMembers;
  24. @synthesize vipMember2 = _vipMember2;
  25. + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict {
  26. return [[self alloc] initWithDictionary:dict];
  27. }
  28. - (instancetype)initWithDictionary:(NSDictionary *)dict {
  29. self = [super init];
  30. // This check serves to make sure that a non-NSDictionary object
  31. // passed into the model class doesn't break the parsing.
  32. if (self && [dict isKindOfClass:[NSDictionary class]]) {
  33. self.next = [self objectOrNilForKey:kMOLiveMemberDataNext fromDictionary:dict];
  34. NSObject *receivedMOUserBase = [dict objectForKey:kMOLiveMemberDataUserBase];
  35. NSMutableArray *parsedMOUserBase = [NSMutableArray array];
  36. if ([receivedMOUserBase isKindOfClass:[NSArray class]]) {
  37. for (NSDictionary *item in (NSArray *)receivedMOUserBase) {
  38. if ([item isKindOfClass:[NSDictionary class]]) {
  39. [parsedMOUserBase addObject:[MOUserBase modelObjectWithDictionary:item]];
  40. }
  41. }
  42. } else if ([receivedMOUserBase isKindOfClass:[NSDictionary class]]) {
  43. [parsedMOUserBase addObject:[MOUserBase modelObjectWithDictionary:(NSDictionary *)receivedMOUserBase]];
  44. }
  45. self.userBase = [NSArray arrayWithArray:parsedMOUserBase];
  46. self.vipMembers = [[self objectOrNilForKey:kMOLiveMemberDataVipMembers fromDictionary:dict] doubleValue];
  47. self.memberMembers = [[self objectOrNilForKey:kMOLiveMemberDataMemberMembers fromDictionary:dict] doubleValue];
  48. self.manageMembers = [[self objectOrNilForKey:kMOLiveMemberDataManageMembers fromDictionary:dict] doubleValue];
  49. self.vipMember2 = [[self objectOrNilForKey:kMOLiveMemberDataVipMembers2 fromDictionary:dict] doubleValue];
  50. }
  51. return self;
  52. }
  53. - (NSDictionary *)dictionaryRepresentation {
  54. NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
  55. [mutableDict setValue:self.next forKey:kMOLiveMemberDataNext];
  56. NSMutableArray *tempArrayForUserBase = [NSMutableArray array];
  57. for (NSObject *subArrayObject in self.userBase) {
  58. if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
  59. // This class is a model object
  60. [tempArrayForUserBase addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
  61. } else {
  62. // Generic object
  63. [tempArrayForUserBase addObject:subArrayObject];
  64. }
  65. }
  66. [mutableDict setValue:[NSArray arrayWithArray:tempArrayForUserBase] forKey:kMOLiveMemberDataUserBase];
  67. [mutableDict setValue:[NSNumber numberWithDouble:self.vipMembers] forKey:kMOLiveMemberDataVipMembers];
  68. [mutableDict setValue:[NSNumber numberWithDouble:self.memberMembers] forKey:kMOLiveMemberDataMemberMembers];
  69. [mutableDict setValue:[NSNumber numberWithDouble:self.manageMembers] forKey:kMOLiveMemberDataManageMembers];
  70. [mutableDict setValue:[NSNumber numberWithDouble:self.vipMember2] forKey:kMOLiveMemberDataVipMembers2];
  71. return [NSDictionary dictionaryWithDictionary:mutableDict];
  72. }
  73. - (NSString *)description {
  74. return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
  75. }
  76. #pragma mark - Helper Method
  77. - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict {
  78. id object = [dict objectForKey:aKey];
  79. return [object isEqual:[NSNull null]] ? nil : object;
  80. }
  81. #pragma mark - NSCoding Methods
  82. - (id)initWithCoder:(NSCoder *)aDecoder {
  83. self = [super init];
  84. self.next = [aDecoder decodeObjectForKey:kMOLiveMemberDataNext];
  85. self.userBase = [aDecoder decodeObjectForKey:kMOLiveMemberDataUserBase];
  86. self.vipMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataVipMembers];
  87. self.memberMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataMemberMembers];
  88. self.manageMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataManageMembers];
  89. self.vipMember2 = [aDecoder decodeDoubleForKey:kMOLiveMemberDataVipMembers2];
  90. return self;
  91. }
  92. - (void)encodeWithCoder:(NSCoder *)aCoder
  93. {
  94. [aCoder encodeObject:_next forKey:kMOLiveMemberDataNext];
  95. [aCoder encodeObject:_userBase forKey:kMOLiveMemberDataUserBase];
  96. [aCoder encodeDouble:_vipMembers forKey:kMOLiveMemberDataVipMembers];
  97. [aCoder encodeDouble:_memberMembers forKey:kMOLiveMemberDataMemberMembers];
  98. [aCoder encodeDouble:_manageMembers forKey:kMOLiveMemberDataManageMembers];
  99. [aCoder encodeDouble:_vipMember2 forKey:kMOLiveMemberDataVipMembers2];
  100. }
  101. - (id)copyWithZone:(NSZone *)zone {
  102. MOLiveMemberData *copy = [[MOLiveMemberData alloc] init];
  103. if (copy) {
  104. copy.next = [self.next copyWithZone:zone];
  105. copy.userBase = [self.userBase copyWithZone:zone];
  106. copy.vipMembers = self.vipMembers;
  107. copy.memberMembers = self.memberMembers;
  108. copy.manageMembers = self.manageMembers;
  109. copy.vipMember2 = self.vipMember2;
  110. }
  111. return copy;
  112. }
  113. @end