Swift:似乎无法访问嵌套数组

时间:2017-01-26 14:04:12

标签: swift3

我正在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"])")
  }

}

我得到错误,“条件绑定的初始化程序必须具有可选类型,而不是字典”。 总的来说,我感觉我没有正确地做到这一点。问题是,阵列的确切结构是未知的。从理论上讲,一本书可以没有章节列出。

提前感谢您的帮助。

1 个答案:

答案 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