You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查NSDictionary中一级和二级是否存在emp_id键

解决方案

要安全检查一级或二级字典中的emp_id键,核心是先判断对象类型,再执行后续操作,避免直接向非字典对象发送containsObjectForKey:消息导致崩溃。

实现思路

  • 先检查当前字典是否包含一级emp_id键;
  • 如果存在,取出该键对应的值,判断其是否为NSDictionary类型;
  • 若是子字典,再检查子字典中是否包含emp_id;
  • 最终综合两种情况的结果,判断是否存在有效emp_id。

代码示例

// 封装成工具方法,传入待检查的字典
- (BOOL)hasValidEmpIDInDictionary:(NSDictionary *)data {
    if (!data) {
        return NO;
    }
    
    // 检查一级emp_id
    id empValue = data[@"emp_id"];
    if (!empValue) {
        return NO;
    }
    
    // 如果是字符串类型,说明一级emp_id有效
    if ([empValue isKindOfClass:[NSString class]]) {
        return YES;
    }
    
    // 如果是子字典,检查二级emp_id
    if ([empValue isKindOfClass:[NSDictionary class]]) {
        return [empValue containsObjectForKey:@"emp_id"];
    }
    
    // 其他类型(比如数字、数组等),视为无效
    return NO;
}

调用示例

// 一级字典情况
NSDictionary *data1 = @{@"emp_id" : @"123456"};
BOOL hasEmp1 = [self hasValidEmpIDInDictionary:data1]; // 返回YES

// 二级字典情况
NSDictionary *data2 = @{@"emp_id" : @{@"emp_id" : @"123456"}};
BOOL hasEmp2 = [self hasValidEmpIDInDictionary:data2]; // 返回YES

// 无emp_id的情况
NSDictionary *data3 = @{@"name" : @"张三"};
BOOL hasEmp3 = [self hasValidEmpIDInDictionary:data3]; // 返回NO

// emp_id对应非字符串/字典的情况
NSDictionary *data4 = @{@"emp_id" : @123456};
BOOL hasEmp4 = [self hasValidEmpIDInDictionary:data4]; // 返回NO

关键说明

  • 使用isKindOfClass:判断对象类型,是Objective-C中避免消息发送崩溃的标准做法;
  • 优先检查一级键,再根据值的类型决定是否进入二级检查,覆盖了两种数据集的场景;
  • 方法中加入了对data为nil的判断,避免空指针异常。

内容的提问来源于stack exchange,提问作者casillas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:32