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

Swift新手求教:如何从三维嵌套字典中获取指定元素?

如何从嵌套字典中获取指定元素?

嘿,作为Swift新手不用慌~先帮你理清楚你定义的这个结构:你写的arrayOFJumpForwardBack其实是一个嵌套字典(不是数组哦,名字有点小误导😉),层级是:Int键 → 对应一个[String: [String]]字典 → 这个子字典的"chapter"键对应一个字符串数组。

下面分几种常见场景教你怎么获取元素:

1. 获取"chapter"对应的完整数组

如果你想拿到整个["15 sec","30 sec","45 sec","60 sec"]数组,用可选绑定是最安全的方式(避免键不存在时崩溃):

// 先判断外层字典的键1是否存在,再判断子字典的"chapter"键是否存在
if let chapterTimes = arrayOFJumpForwardBack[1]?["chapter"] {
    print(chapterTimes) // 输出 ["15 sec","30 sec","45 sec","60 sec"]
}

2. 获取数组中的单个元素(比如第一个"15 sec")

在拿到数组的基础上,你可以继续访问数组的元素。同样推荐安全的写法:

if let chapterTimes = arrayOFJumpForwardBack[1]?["chapter"], 
   let firstTime = chapterTimes.first {
    print(firstTime) // 输出 "15 sec"
}

或者用数组下标,但要先判断数组不为空:

if let chapterTimes = arrayOFJumpForwardBack[1]?["chapter"], 
   !chapterTimes.isEmpty {
    let thirdTime = chapterTimes[2] // 拿到"45 sec"
    print(thirdTime)
}

3. 不推荐新手使用:强制解包

如果你确定所有键都一定存在,也可以用强制解包!,但风险很高——只要某个键不存在,代码就会崩溃,所以不建议新手用:

let chapterTimes = arrayOFJumpForwardBack[1]!["chapter"]!
let secondTime = chapterTimes[1] // 拿到"30 sec"

给新手的小建议

如果这个数据结构是固定的,不如自定义一个结构体,代码可读性和安全性都会更高:

struct JumpTiming {
    let chapter: [String]
}

// 初始化的时候更清晰
var jumpTimings: [Int: JumpTiming] = [
    1: JumpTiming(chapter: ["15 sec","30 sec","45 sec","60 sec"])
]

// 访问的时候也更直观
if let timing = jumpTimings[1] {
    print(timing.chapter)
}

内容的提问来源于stack exchange,提问作者Орхан Ахназаров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:13