我正在Swift中测试我的脚,并且我正在尝试访问属于嵌套数组的某些对象。
array
的结构看起来像这样:
[ "Title": "Book Title", "Type": "Fiction", "Chapters": [
{"Title": "Chapter 1 Title", "Content": "Lorem ipsum dolor sit amet...", "Keyword": "foo"},
{"Title": "Chapter 3 Title", "Content": "Lorem ipsum dolor sit amet...", "Keyword": "foo"},
{"Title": "Chapter 5 Title", "Content": "Lorem ipsum dolor sit amet...", "Keyword": "foo"},
...
],
[ "Title": "Book Title", "Type": "Fiction", "Chapters": [
{"Title": "Chapter 2 Title", "Content": "Lorem ipsum dolor sit amet...", "Keyword": "foo"},
{"Title": "Chapter 3 Title", "Content": "Lorem ipsum dolor sit amet...", "Keyword": "foo"}
],
...]
数组从plist文件加载,并加载如下:
var myArr: Array<Any>
myArr = NSArray(contentsOfFile: path!) as! [Dictionary<String, Any>]
我无法访问章节数组中的特定子项。
let bookNum = 1
let chapNum = 3
let s: Dictionary = myArr[bookNum] as! Dictionary<String, Any>
if let s1 = (s["Chapters"] as AnyObject)[chapNum] {
if let obj = s1 as! Dictionary<String, Any> {
print("/(obj["Title"])")
}
}
我得到错误,“条件绑定的初始化程序必须具有可选类型,而不是字典”。 总的来说,我感觉我没有正确地做到这一点。问题是,阵列的确切结构是未知的。从理论上讲,一本书可以没有章节列出。
提前感谢您的帮助。
答案 0 :(得分:0)
您已将myArr
类型指定为[Dictionary<String, Any>]
,因此无需明确指定s
的类型,因为如果您从myArr
访问对象,则应该let s = myArr[bookNum]
没有别的字典。
Chapters
现在if let chapters = s["Chapters"] as? [Dictionary<String, Any>] {// OR [[String:Any]]
if chapNum < chapters.count {
print(chapters[chapNum]["Title"])
}
}
也是字典数组,因此您需要输入它,然后根据需要访问该章节。
strArr["str1"][2]["str3"]
strArr.str1[2].str3