// // NSDictionary+JKSafeAccess.m // JKCategories (https://github.com/shaojiankui/JKCategories) // // Created by Jakey on 15/1/25. // Copyright (c) 2015年 www.skyfox.org. All rights reserved. // #import "NSDictionary+JKSafeAccess.h" @implementation NSDictionary (JKSafeAccess) //- (BOOL)jk_hasKey:(NSString *)key //{ // return [self objectForKey:key] != nil; //} - (NSString*)jk_stringForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return nil; } if ([value isKindOfClass:[NSString class]]) { return (NSString*)value; } if ([value isKindOfClass:[NSNumber class]]) { return [value stringValue]; } return nil; } - (NSNumber*)jk_numberForKey:(id)key { id value = [self objectForKey:key]; if ([value isKindOfClass:[NSNumber class]]) { return (NSNumber*)value; } if ([value isKindOfClass:[NSString class]]) { NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; return [f numberFromString:(NSString*)value]; } return nil; } - (NSDecimalNumber *)jk_decimalNumberForKey:(id)key { id value = [self objectForKey:key]; if ([value isKindOfClass:[NSDecimalNumber class]]) { return value; } else if ([value isKindOfClass:[NSNumber class]]) { NSNumber * number = (NSNumber*)value; return [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]]; } else if ([value isKindOfClass:[NSString class]]) { NSString * str = (NSString*)value; return [str isEqualToString:@""] ? nil : [NSDecimalNumber decimalNumberWithString:str]; } return nil; } - (NSArray*)jk_arrayForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return nil; } if ([value isKindOfClass:[NSArray class]]) { return value; } return nil; } - (NSDictionary*)jk_dictionaryForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return nil; } if ([value isKindOfClass:[NSDictionary class]]) { return value; } return nil; } - (NSInteger)jk_integerForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) { return [value integerValue]; } return 0; } - (NSUInteger)jk_unsignedIntegerForKey:(id)key{ id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) { return [value unsignedIntegerValue]; } return 0; } - (BOOL)jk_boolForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return NO; } if ([value isKindOfClass:[NSNumber class]]) { return [value boolValue]; } if ([value isKindOfClass:[NSString class]]) { return [value boolValue]; } return NO; } - (int16_t)jk_int16ForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]]) { return [value shortValue]; } if ([value isKindOfClass:[NSString class]]) { return [value intValue]; } return 0; } - (int32_t)jk_int32ForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) { return [value intValue]; } return 0; } - (int64_t)jk_int64ForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) { return [value longLongValue]; } return 0; } - (char)jk_charForKey:(id)key{ id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) { return [value charValue]; } return 0; } - (short)jk_shortForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]]) { return [value shortValue]; } if ([value isKindOfClass:[NSString class]]) { return [value intValue]; } return 0; } - (float)jk_floatForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) { return [value floatValue]; } return 0; } - (double)jk_doubleForKey:(id)key { id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return 0; } if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) { return [value doubleValue]; } return 0; } - (long long)jk_longLongForKey:(id)key { id value = [self objectForKey:key]; if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) { return [value longLongValue]; } return 0; } - (unsigned long long)jk_unsignedLongLongForKey:(id)key { id value = [self objectForKey:key]; if ([value isKindOfClass:[NSString class]]) { NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; value = [nf numberFromString:value]; } if ([value isKindOfClass:[NSNumber class]]) { return [value unsignedLongLongValue]; } return 0; } - (NSDate *)jk_dateForKey:(id)key dateFormat:(NSString *)dateFormat{ NSDateFormatter *formater = [[NSDateFormatter alloc]init]; formater.dateFormat = dateFormat; id value = [self objectForKey:key]; if (value == nil || value == [NSNull null]) { return nil; } if ([value isKindOfClass:[NSString class]] && ![value isEqualToString:@""] && dateFormat) { return [formater dateFromString:value]; } return nil; } //CG - (CGFloat)jk_CGFloatForKey:(id)key { CGFloat f = [self[key] doubleValue]; return f; } - (CGPoint)jk_pointForKey:(id)key { CGPoint point = CGPointFromString(self[key]); return point; } - (CGSize)jk_sizeForKey:(id)key { CGSize size = CGSizeFromString(self[key]); return size; } - (CGRect)jk_rectForKey:(id)key { CGRect rect = CGRectFromString(self[key]); return rect; } @end #pragma --mark NSMutableDictionary setter @implementation NSMutableDictionary (JKSafeAccess) -(void)jk_setObj:(id)i forKey:(NSString*)key{ if (i!=nil) { self[key] = i; } } -(void)jk_setString:(NSString*)i forKey:(NSString*)key; { [self setValue:i forKey:key]; } -(void)jk_setBool:(BOOL)i forKey:(NSString *)key { self[key] = @(i); } -(void)jk_setInt:(int)i forKey:(NSString *)key { self[key] = @(i); } -(void)jk_setInteger:(NSInteger)i forKey:(NSString *)key { self[key] = @(i); } -(void)jk_setUnsignedInteger:(NSUInteger)i forKey:(NSString *)key { self[key] = @(i); } -(void)jk_setCGFloat:(CGFloat)f forKey:(NSString *)key { self[key] = @(f); } -(void)jk_setChar:(char)c forKey:(NSString *)key { self[key] = @(c); } -(void)jk_setFloat:(float)i forKey:(NSString *)key { self[key] = @(i); } -(void)jk_setDouble:(double)i forKey:(NSString*)key{ self[key] = @(i); } -(void)jk_setLongLong:(long long)i forKey:(NSString*)key{ self[key] = @(i); } -(void)jk_setPoint:(CGPoint)o forKey:(NSString *)key { self[key] = NSStringFromCGPoint(o); } -(void)jk_setSize:(CGSize)o forKey:(NSString *)key { self[key] = NSStringFromCGSize(o); } -(void)jk_setRect:(CGRect)o forKey:(NSString *)key { self[key] = NSStringFromCGRect(o); } @end