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,提问作者Орхан Ахназаров
相关产品推荐
相关产品推荐

