// // MOLiveMemberData.m // // Created by SuperCabbage on 2023/11/23 // Copyright (c) 2023 __MyCompanyName__. All rights reserved. // #import "MOLiveMemberData.h" #import "MOUserBase.h" NSString *const kMOLiveMemberDataNext = @"next"; NSString *const kMOLiveMemberDataUserBase = @"list"; NSString *const kMOLiveMemberDataVipMembers = @"vipMembers"; NSString *const kMOLiveMemberDataMemberMembers = @"memberMembers"; NSString *const kMOLiveMemberDataManageMembers = @"manageMembers"; NSString *const kMOLiveMemberDataVipMembers2 = @"vipMember2"; @interface MOLiveMemberData () - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict; @end @implementation MOLiveMemberData @synthesize next = _next; @synthesize userBase = _userBase; @synthesize vipMembers = _vipMembers; @synthesize memberMembers = _memberMembers; @synthesize manageMembers = _manageMembers; @synthesize vipMember2 = _vipMember2; + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict { return [[self alloc] initWithDictionary:dict]; } - (instancetype)initWithDictionary:(NSDictionary *)dict { self = [super init]; // This check serves to make sure that a non-NSDictionary object // passed into the model class doesn't break the parsing. if (self && [dict isKindOfClass:[NSDictionary class]]) { self.next = [self objectOrNilForKey:kMOLiveMemberDataNext fromDictionary:dict]; NSObject *receivedMOUserBase = [dict objectForKey:kMOLiveMemberDataUserBase]; NSMutableArray *parsedMOUserBase = [NSMutableArray array]; if ([receivedMOUserBase isKindOfClass:[NSArray class]]) { for (NSDictionary *item in (NSArray *)receivedMOUserBase) { if ([item isKindOfClass:[NSDictionary class]]) { [parsedMOUserBase addObject:[MOUserBase modelObjectWithDictionary:item]]; } } } else if ([receivedMOUserBase isKindOfClass:[NSDictionary class]]) { [parsedMOUserBase addObject:[MOUserBase modelObjectWithDictionary:(NSDictionary *)receivedMOUserBase]]; } self.userBase = [NSArray arrayWithArray:parsedMOUserBase]; self.vipMembers = [[self objectOrNilForKey:kMOLiveMemberDataVipMembers fromDictionary:dict] doubleValue]; self.memberMembers = [[self objectOrNilForKey:kMOLiveMemberDataMemberMembers fromDictionary:dict] doubleValue]; self.manageMembers = [[self objectOrNilForKey:kMOLiveMemberDataManageMembers fromDictionary:dict] doubleValue]; self.vipMember2 = [[self objectOrNilForKey:kMOLiveMemberDataVipMembers2 fromDictionary:dict] doubleValue]; } return self; } - (NSDictionary *)dictionaryRepresentation { NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; [mutableDict setValue:self.next forKey:kMOLiveMemberDataNext]; NSMutableArray *tempArrayForUserBase = [NSMutableArray array]; for (NSObject *subArrayObject in self.userBase) { if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) { // This class is a model object [tempArrayForUserBase addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]]; } else { // Generic object [tempArrayForUserBase addObject:subArrayObject]; } } [mutableDict setValue:[NSArray arrayWithArray:tempArrayForUserBase] forKey:kMOLiveMemberDataUserBase]; [mutableDict setValue:[NSNumber numberWithDouble:self.vipMembers] forKey:kMOLiveMemberDataVipMembers]; [mutableDict setValue:[NSNumber numberWithDouble:self.memberMembers] forKey:kMOLiveMemberDataMemberMembers]; [mutableDict setValue:[NSNumber numberWithDouble:self.manageMembers] forKey:kMOLiveMemberDataManageMembers]; [mutableDict setValue:[NSNumber numberWithDouble:self.vipMember2] forKey:kMOLiveMemberDataVipMembers2]; return [NSDictionary dictionaryWithDictionary:mutableDict]; } - (NSString *)description { return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]]; } #pragma mark - Helper Method - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict { id object = [dict objectForKey:aKey]; return [object isEqual:[NSNull null]] ? nil : object; } #pragma mark - NSCoding Methods - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; self.next = [aDecoder decodeObjectForKey:kMOLiveMemberDataNext]; self.userBase = [aDecoder decodeObjectForKey:kMOLiveMemberDataUserBase]; self.vipMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataVipMembers]; self.memberMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataMemberMembers]; self.manageMembers = [aDecoder decodeDoubleForKey:kMOLiveMemberDataManageMembers]; self.vipMember2 = [aDecoder decodeDoubleForKey:kMOLiveMemberDataVipMembers2]; return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_next forKey:kMOLiveMemberDataNext]; [aCoder encodeObject:_userBase forKey:kMOLiveMemberDataUserBase]; [aCoder encodeDouble:_vipMembers forKey:kMOLiveMemberDataVipMembers]; [aCoder encodeDouble:_memberMembers forKey:kMOLiveMemberDataMemberMembers]; [aCoder encodeDouble:_manageMembers forKey:kMOLiveMemberDataManageMembers]; [aCoder encodeDouble:_vipMember2 forKey:kMOLiveMemberDataVipMembers2]; } - (id)copyWithZone:(NSZone *)zone { MOLiveMemberData *copy = [[MOLiveMemberData alloc] init]; if (copy) { copy.next = [self.next copyWithZone:zone]; copy.userBase = [self.userBase copyWithZone:zone]; copy.vipMembers = self.vipMembers; copy.memberMembers = self.memberMembers; copy.manageMembers = self.manageMembers; copy.vipMember2 = self.vipMember2; } return copy; } @end