Swift4中如何从[String:AnyObject]类型API响应提取名称数组
在Swift 4中从
[String: AnyObject]响应提取name字段到数组 这其实是Swift里很常见的JSON解析场景,我来给你一步步拆解怎么安全实现:
首先看你的响应结构:外层是[String: AnyObject]字典,其中"result"对应一个包含多个子字典的集合,每个子字典都有id和"name"字段。我们的目标是把所有有效"name"值提取到[String]数组中。
完整实现代码
// 假设这是你从API获取到的响应字典 let apiResponse: [String: AnyObject] = ["result": [ ["id": 1 as AnyObject, "name": "Alen" as AnyObject], ["id": 12 as AnyObject, "name": "Peter" as AnyObject], ["id": 14 as AnyObject, "name": "John" as AnyObject], ["id": 16 as AnyObject, "name": "Ema" as AnyObject], ["id": 19 as AnyObject, "name": "Shane" as AnyObject], ["id": 211 as AnyObject, "name": "Mia" as AnyObject] ] as AnyObject] // 1. 安全解析出result对应的数组 guard let resultItems = apiResponse["result"] as? [[String: AnyObject]] else { // 处理解析失败的情况,比如返回空数组或记录错误 print("无法解析result字段,格式不符合预期") let names: [String] = [] return } // 2. 提取所有name字段,自动过滤无效值 let namesArray = resultItems.compactMap { item in // 尝试将name字段转为String,失败则返回nil,会被compactMap自动过滤 return item["name"] as? String } // 输出结果:["Alen", "Peter", "John", "Ema", "Shane", "Mia"] print(namesArray)
代码说明
- 安全类型转换:用
guard let替代强制解包(!),避免因API响应格式异常导致崩溃。如果"result"不是预期的数组类型,会进入else分支做错误处理。 - 高效过滤与转换:
compactMap是Swift的实用方法,它会遍历数组元素执行转换,自动过滤掉返回nil的无效元素(比如某个子字典没有"name"字段、或"name"不是String类型的情况),最终得到一个纯净的[String]数组。
内容的提问来源于stack exchange,提问作者batMan007
相关产品推荐
相关产品推荐

