美文网首页
iOS NSDictionary防止key为空时崩溃

iOS NSDictionary防止key为空时崩溃

作者: JohnayXiao | 来源:发表于2019-08-10 09:43 被阅读0次

NSDictionary取值为空,程序就出现赋值崩溃

解决方案给NSDictionary添加一个扩展分类,对取出的value进行判空

.h文件
#import <Foundation/Foundation.h>

@interface NSDictionary (Extension)

/**
 从字典里取NSInteger(内带判空)

 @param key 字典Key值
 @return NSInteger
 */
- (NSInteger)integerValueForKey:(id)key;

/**
 从字典里取int(内带判空)
 
 @param key 字典Key值
 @return int
 */
- (int)intValueForKey:(id)key;

/**
 从字典里取long long(内带判空)
 
 @param key 字典Key值
 @return long long
 */
- (long long)longlongValueForKey:(id)key;

/**
 从字典里取BOOL(内带判空)
 
 @param key 字典Key值
 @return BOOL
 */
- (BOOL)boolValueForKey:(id)key;

/**
 从字典里取float(内带判空)
 
 @param key 字典Key值
 @return float
 */
- (float)floatValueForKey:(id)key;

/**
 从字典里取字符串(内带判空)
 
 @param key 字典Key值
 @return NSString
 */
- (NSString *)stringValueForKey:(id)key;

/**
 从字典里取数组(内带判空)
 
 @param key 字典Key值
 @return NSArray
 */
- (NSArray *)arrayValueForKey:(id)key;

/**
 从字典里取可变数组(内带判空)
 
 @param key 字典Key值
 @return NSMutableArray
 */
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;

/**
 从字典里取字典(内带判空)
 
 @param key 字典Key值
 @return NSDictionary
 */
- (NSDictionary *)dictionaryValueForKey:(id)key;

@end
.m文件
#import "NSDictionary+Extension.h"

@implementation NSDictionary (Extension)

- (NSInteger)integerValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    return value == nil ? 0 : [value integerValue];
}

- (int)intValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    return value == nil ? 0 : [value intValue];
}


- (long long)longlongValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    return value == nil ? 0 : [value longLongValue];
}

- (BOOL)boolValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    return value == nil ? NO : [value boolValue];
}

- (float)floatValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    return value == nil ? NO : [value floatValue];
}

- (NSString *)stringValueForKey:(id)key {
    return [self notNullValueForKey:key];
}

- (NSArray *)arrayValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    if(![value isKindOfClass:[NSArray class]]) {
        return nil;
    }
    return value;
}

- (NSMutableArray*)mutableArrayValueForKey:(NSString *)key {
    id value = [self notNullValueForKey:key];
    if(![value isKindOfClass:[NSMutableArray class]]) {
        return nil;
    }
    return value;
}

- (NSDictionary *)dictionaryValueForKey:(id)key {
    id value = [self notNullValueForKey:key];
    if(![value isKindOfClass:[NSDictionary class]]) {
        return nil;
    }
    return value;
}

#pragma mark 判断是否null
- (BOOL)isNullValue:(id)value {
    return [value isEqual:[NSNull null]];
}

- (id)notNullValueForKey:(id)key {
    id value = [self objectForKey:key];
    if([self isNullValue:value]) {
        return nil;
    }
    return value;
}
@end

相关文章

网友评论

      本文标题:iOS NSDictionary防止key为空时崩溃

      本文链接:https://www.haomeiwen.com/subject/semljctx.html