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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:07