Swift 3技术问题:如何访问Plist中legs数组的title字段值
访问Plist中legs数组的title值解决方案
嘿,我来帮你搞定这个问题!你已经能成功获取abs相关的字典值了,要拿到legs数组里的title其实只需要在现有逻辑上稍作调整,咱们一步步来:
首先,我注意到你用了强制解包(!),这其实容易导致崩溃,所以我会用可选绑定来做安全的类型转换和值获取,让代码更健壮。
情况1:legs数组直接在levels字典下
如果你的Plist结构是levels字典里直接有一个legs键,对应的值是数组(数组元素是包含title的字典),那可以用这段代码:
let path = Bundle.main.path(forResource:"Exercise", ofType: "plist") // 安全加载Plist并转换为Swift字典 guard let dict = NSDictionary(contentsOfFile: path!) as? [String: Any] else { print("加载Plist失败或者格式不正确") return } // 获取levels字典 guard let levelDict = dict["levels"] as? [String: Any] else { print("Plist中未找到levels字典") return } // 取出legs数组,确保它是字典数组类型 guard let legsArray = levelDict["legs"] as? [[String: Any]] else { print("未找到legs数组或者数组格式错误") return } // 遍历数组,提取每个条目的title值 for legExercise in legsArray { if let title = legExercise["title"] as? String { print("腿部训练标题:\(title)") } else { print("当前训练条目没有title或者title不是字符串类型") } }
情况2:legs数组在levels下的某个子字典里(比如你代码里的something)
如果你的legs数组是嵌套在levels字典中something这个键对应的子字典里,那调整一下逻辑即可:
let path = Bundle.main.path(forResource:"Exercise", ofType: "plist") guard let dict = NSDictionary(contentsOfFile: path!) as? [String: Any] else { print("加载Plist失败或者格式不正确") return } guard let levelDict = dict["levels"] as? [String: Any] else { print("Plist中未找到levels字典") return } // 先找到something对应的子字典 guard let somethingDict = levelDict["something"] as? [String: Any] else { print("未找到something对应的字典") return } // 从somethingDict中取出legs数组 guard let legsArray = somethingDict["legs"] as? [[String: Any]] else { print("something字典中未找到legs数组") return } // 遍历获取title for legExercise in legsArray { if let title = legExercise["title"] as? String { print("腿部训练标题:\(title)") } }
一些小提示
- 尽量避免使用强制解包(
!),一旦Plist结构有变动或者文件加载失败,强制解包会导致App崩溃,用guard let或者if let做安全检查更稳妥。 - 确认你的Plist结构和代码里的键名完全匹配(大小写敏感!),比如
legs和title的拼写不能错。
内容的提问来源于stack exchange,提问作者IMan Merzaie
相关产品推荐
相关产品推荐

