Swift字典表达式歧义错误排查及指定学校学生数据提取
排查并修正Swift嵌套数组字典的歧义错误及提取指定学校学生数据
错误原因分析
- 数组结构类型不匹配:你将
school声明为[[String:Any]](数组元素为字典),但实际初始化时是三层嵌套数组([[[String:Any]]]),每个学校数据被额外包裹了一层数组,导致后续取值时类型转换出现歧义。 - 目标学校筛选逻辑缺失:循环中未做学校名称判断,直接遍历所有数据,无法精准提取"motherland"的学生信息。
- 键名不统一:部分字典使用
roll_number,部分使用roll-number,虽不是直接引发歧义的原因,但会影响后续取值的一致性。
修正后的代码
// 修正数组类型以匹配实际嵌套结构,同时统一键名提升可读性 var school: [[[String: Any]]] = [ [[ "schoolName": "devashya", "address": "new_nikol", "students": [ ["name": "chirag", "rollNumber": "10"], ["name": "hiren", "rollNumber": "20"], ["name": "roshan", "rollNumber": "30"] ] ]], [[ "schoolName": "sankalpschool", "address": "nikol", "students": [ ["name": "keyur", "rollNumber": "40"], ["name": "mukesh", "rollNumber": "50"], ["name": "ravi", "rollNumber": "60"] ] ]], [[ "schoolName": "motherland", "address": "naroda", "students": [ ["name": "veer", "rollNumber": "70"], ["name": "nirav", "rollNumber": "80"], ["name": "rizvan", "rollNumber": "90"] ] ]], [[ "schoolName": "vip", "address": "newnikol", "students": [ ["name": "vikky", "rollNumber": "100"], ["name": "alpesh", "rollNumber": "110"], ["name": "raavi", "rollNumber": "120"] ] ]], [[ "schoolName": "chanakya", "address": "sardarchowk", "students": [ ["name": "mayur", "rollNumber": "130"], ["name": "vrinkesh", "rollNumber": "140"], ["name": "annav", "rollNumber": "150"] ] ]] ] let targetSchool = "motherland" for schoolGroup in school { // 取出每组中唯一的学校字典 guard let schoolDict = schoolGroup.first else { continue } // 校验是否为目标学校 guard let schoolName = schoolDict["schoolName"] as? String, schoolName == targetSchool else { continue } // 安全提取并打印学生数据 if let students = schoolDict["students"] as? [[String: Any]] { print("=== \(targetSchool) 学校学生数据 ===") for student in students { print("姓名: \(student["name"] ?? "未知"), 学号: \(student["rollNumber"] ?? "未知")") } } }
核心修正点
- 类型匹配:将
school的类型修正为[[[String: Any]]],与实际三层嵌套结构一致,消除类型歧义。 - 精准筛选:新增学校名称判断逻辑,只处理目标学校"motherland"的数据。
- 键名统一:把
roll_number/roll-number统一为rollNumber,school1等改为schoolName,提升代码可读性和维护性。 - 安全取值:使用
guard let和if let做类型转换与空值校验,避免运行时崩溃。
内容的提问来源于stack exchange,提问作者bharti_____
相关产品推荐
相关产品推荐

