// // MOGuildData.m // // Created by SuperCabbage on 2023/10/25 // Copyright (c) 2023 __MyCompanyName__. All rights reserved. // #import "MOGuildData.h" #import "MOGuildBase.h" NSString *const kMOGuildDataStatus = @"status"; NSString *const kMOGuildDataGuildPower = @"power"; NSString *const kMOGuildDataGuildBase = @"me"; NSString *const kMOGuildDataGuidlLatest = @"latest"; @interface MOGuildData () - (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict; @end @implementation MOGuildData @synthesize status = _status; @synthesize guildPower = _guildPower; @synthesize guildBase = _guildBase; @synthesize guidlLatest = _guidlLatest; + (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.status = [[self objectOrNilForKey:kMOGuildDataStatus fromDictionary:dict] doubleValue]; NSObject *receivedMOGuildPower = [dict objectForKey:kMOGuildDataGuildPower]; NSMutableArray *parsedMOGuildPower = [NSMutableArray array]; if ([receivedMOGuildPower isKindOfClass:[NSArray class]]) { for (NSDictionary *item in (NSArray *)receivedMOGuildPower) { if ([item isKindOfClass:[NSDictionary class]]) { [parsedMOGuildPower addObject:[MOGuildBase modelObjectWithDictionary:item]]; } } } else if ([receivedMOGuildPower isKindOfClass:[NSDictionary class]]) { [parsedMOGuildPower addObject:[MOGuildBase modelObjectWithDictionary:(NSDictionary *)receivedMOGuildPower]]; } self.guildPower = [NSArray arrayWithArray:parsedMOGuildPower]; self.guildBase = [MOGuildBase modelObjectWithDictionary:[dict objectForKey:kMOGuildDataGuildBase]]; NSObject *receivedMOGuidlLatest = [dict objectForKey:kMOGuildDataGuidlLatest]; NSMutableArray *parsedMOGuidlLatest = [NSMutableArray array]; if ([receivedMOGuidlLatest isKindOfClass:[NSArray class]]) { for (NSDictionary *item in (NSArray *)receivedMOGuidlLatest) { if ([item isKindOfClass:[NSDictionary class]]) { [parsedMOGuidlLatest addObject:[MOGuildBase modelObjectWithDictionary:item]]; } } } else if ([receivedMOGuidlLatest isKindOfClass:[NSDictionary class]]) { [parsedMOGuidlLatest addObject:[MOGuildBase modelObjectWithDictionary:(NSDictionary *)receivedMOGuidlLatest]]; } self.guidlLatest = [NSArray arrayWithArray:parsedMOGuidlLatest]; } return self; } - (NSDictionary *)dictionaryRepresentation { NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; [mutableDict setValue:[NSNumber numberWithDouble:self.status] forKey:kMOGuildDataStatus]; NSMutableArray *tempArrayForGuildPower = [NSMutableArray array]; for (NSObject *subArrayObject in self.guildPower) { if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) { // This class is a model object [tempArrayForGuildPower addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]]; } else { // Generic object [tempArrayForGuildPower addObject:subArrayObject]; } } [mutableDict setValue:[NSArray arrayWithArray:tempArrayForGuildPower] forKey:kMOGuildDataGuildPower]; [mutableDict setValue:[self.guildBase dictionaryRepresentation] forKey:kMOGuildDataGuildBase]; NSMutableArray *tempArrayForGuidlLatest = [NSMutableArray array]; for (NSObject *subArrayObject in self.guidlLatest) { if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) { // This class is a model object [tempArrayForGuidlLatest addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]]; } else { // Generic object [tempArrayForGuidlLatest addObject:subArrayObject]; } } [mutableDict setValue:[NSArray arrayWithArray:tempArrayForGuidlLatest] forKey:kMOGuildDataGuidlLatest]; 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.status = [aDecoder decodeDoubleForKey:kMOGuildDataStatus]; self.guildPower = [aDecoder decodeObjectForKey:kMOGuildDataGuildPower]; self.guildBase = [aDecoder decodeObjectForKey:kMOGuildDataGuildBase]; self.guidlLatest = [aDecoder decodeObjectForKey:kMOGuildDataGuidlLatest]; return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeDouble:_status forKey:kMOGuildDataStatus]; [aCoder encodeObject:_guildPower forKey:kMOGuildDataGuildPower]; [aCoder encodeObject:_guildBase forKey:kMOGuildDataGuildBase]; [aCoder encodeObject:_guidlLatest forKey:kMOGuildDataGuidlLatest]; } - (id)copyWithZone:(NSZone *)zone { MOGuildData *copy = [[MOGuildData alloc] init]; if (copy) { copy.status = self.status; copy.guildPower = [self.guildPower copyWithZone:zone]; copy.guildBase = [self.guildBase copyWithZone:zone]; copy.guidlLatest = [self.guidlLatest copyWithZone:zone]; } return copy; } @end