【iOS開發】NSDictionary判斷key存在,且value非空

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • 大抵住在靠海的街區便是這樣一種觸感,舒懷釋然,浪花卷疊撲向沙灘的嘩啦聲不停地在耳邊回響,這或許會聯想起飛蛾撲火的勇...
    靜森閱讀 383評論 0 0
  • 一,序: 中國書法藝術 書法是中國特有一種傳統文化及藝術。它是漢字書寫的一種法則,又稱:書法。 類別,毛筆,硬筆(...
    量子哥閱讀 3,421評論 29 18
  • 這個學校,有時熟悉的好像圍繞在我皮膚上的衣裳,但大多數卻如陌生的像隔岸相望的獨木,一支無緣,不安堅強。 ...
    SANDAO閱讀 337評論 0 0