Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:如何在plist中读取数组中的多个数组?_Ios_Arrays_Swift_Plist - Fatal编程技术网

Ios Swift:如何在plist中读取数组中的多个数组?

Ios Swift:如何在plist中读取数组中的多个数组?,ios,arrays,swift,plist,Ios,Arrays,Swift,Plist,这是我的护照 集合视图 使用swift3,我正在阅读plist,以便用这段代码完美地填充我的数组,但是我不知道当plist在根数组中有数组时如何访问它 当根是数组时,我用来读取的代码 var mainGroup = [String]() var myArray: [String]? if let path = Bundle.main.path(forResource: "items", ofType: "plist") { myArray = NSArray(contentsOfFi

这是我的护照

集合视图

使用swift3,我正在阅读plist,以便用这段代码完美地填充我的数组,但是我不知道当plist在根数组中有数组时如何访问它

当根是数组时,我用来读取的代码

var mainGroup = [String]()

var myArray: [String]?
if let path = Bundle.main.path(forResource: "items", ofType: "plist") {
    myArray = NSArray(contentsOfFile: path) as? [String]
}

mainGroup = myArray!
但是在这个plist中,要读取的数组不止根。我想了解根目录有多少个数组,因此在我的集合视图中,我在
numberofitemsinssection
cellForItemAt
didSelectItemAt
中使用它。我还想读取数组中的项,以便在选择项时在集合的详细视图中显示它


结论:我想了解根数组中有多少数组可以在
.count
中使用,以及如何访问数组中的项目以在另一个视图控制器中显示它的详细信息。要访问数组,它应该是
array[2]
,但是如果我想显示字符串“Jeans”和“4”等,那该怎么办呢?谢谢你我想你在数据结构上犯了一个错误。也许你可以试试下面的代码

var mainGroup = [[Any]]()

var myArray: [[Any]]?
if let path = Bundle.main.path(forResource: "items", ofType: "plist") {
    myArray = NSArray(contentsOfFile: path)
}

if let myArr = myArray {
   mainGroup = myArr
}
使用:

let parsePlist=parsePlist(名称:)
如果让sectionArray=parsePlist.sectionArrayFromPlist(){
//使用sectionArray
}

我分别用rootArray和subArray添加了注释


在Swift中,读取属性列表文件的推荐方法是
PropertyListSerialization
。避免了使用基础<代码> NSArray < /代码> .< 代码将打印节号和内部数组中的所有项

如果属性列表应该填充一个表视图,我建议将内部数组声明为dictionary

let url = Bundle.main.url(forResource:"items", withExtension: "plist")!
do {
    let data = try Data(contentsOf:url)
    let sections = try PropertyListSerialization.propertyList(from: data, format: nil) as! [[Any]]

    for (index, section) in sections.enumerated() {
        print("section ", index)
        for item in section {
            print(item)
        }
    }
} catch {
    print("This error must never occur", error)
}

这个代码会做什么?允许我访问根数组?1中的数组。plist不是字符串数组的数组。2.不要不必要地强制展开选项。您应该修复或删除您的答案。还有其他问题吗?我如何在我选择的数组中抓取一个项目并打印它?我知道我可以将其附加到数组中,但要获得基于索引的IndexArray将非常复杂。您可以使用
部分[2]
获取项目。但正如答案中提到的,更适合使用字典(键/值对)这一奇妙的答案!直接开箱即用。答案很简单-例如,您可以访问文件中第5个数组的第2个元素,即[4][1]-[4]节返回第5个位置的数组(从0开始),然后[1]后缀从该数组中获取第2个元素。
let parsePlist = ParsePlist(name: <yourplistname>)
if let sectionArray = parsePlist.sectionArrayFromPlist() {
   // use sectionArray
}
   override func viewDidLoad() {
        super.viewDidLoad()
        readPlist()
    }
    func readPlist(){
        let path = Bundle.main.path(forResource: "SampleData", ofType: "plist")
        let rootArray = NSArray(contentsOfFile: path!)!
        print(rootArray.count)//Gives count for total objects. You can use in number of rows

        for data in rootArray {
            let subArray = data as? NSArray ?? []
            print(subArray.count)//Gives you subarray count
            for value in subArray {
                print("objects are \(value)")//Gives you contains of subarray
            }
        }

    }
}
let url = Bundle.main.url(forResource:"items", withExtension: "plist")!
do {
    let data = try Data(contentsOf:url)
    let sections = try PropertyListSerialization.propertyList(from: data, format: nil) as! [[Any]]

    for (index, section) in sections.enumerated() {
        print("section ", index)
        for item in section {
            print(item)
        }
    }
} catch {
    print("This error must never occur", error)
}