Arrays 如何基于本地json文件填充表视图?

Arrays 如何基于本地json文件填充表视图?,arrays,json,swift,uitableview,tableview,Arrays,Json,Swift,Uitableview,Tableview,我正在创建一个简单的游戏,想创建一个关卡选择屏幕。为了保存所有级别,我创建了一个JSON文件。我现在试图用JSON文件中的级别填充一个表视图 [ { "name": "animals", "levels": [ {"start": "cat", "end": "bat"}, {"start": "dog", "end": "pig"} ] }, { "name"

我正在创建一个简单的游戏,想创建一个关卡选择屏幕。为了保存所有级别,我创建了一个JSON文件。我现在试图用JSON文件中的级别填充一个表视图

[
    {
        "name": "animals",
        "levels": [
            {"start": "cat", "end": "bat"},
            {"start": "dog", "end": "pig"}
        ]
    },
    {
        "name": "foods",
        "levels": [
            {"start": "grape", "end": "apple"}
        ]
    }
]
我已经能够成功地基于如下所示的数组填充一个表,但是我不知道如何从json文件中填充它

import UIKit

var test = ["hello", "world"]

class PackTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return test.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = test[indexPath.row]

        return cell
    }
}
我想用这个JSON文件填充表视图,以实现一个显示名称的表:

动物
食物

谢谢

非常简单:

在类之外创建两个结构

struct Item: Decodable {
    let name: String
    let levels : [Level]
}

struct Level: Decodable {
    let start, end: String
}
var items = [Item]()
类内部的数据源数组

struct Item: Decodable {
    let name: String
    let levels : [Level]
}

struct Level: Decodable {
    let start, end: String
}
var items = [Item]()
viewDidLoad
中,假设捆绑包中的文件名为
items.JSON

override func viewDidLoad() {
    super.viewDidLoad()
    do {
        let data = try Data(contentsOf: Bundle.main.url(forResource: "items", withExtension: "json")!)
        items = try JSONDecoder().decode([Item].self, from: data)
        tableView.reloadData()
    } catch { print(error) }
}
您可以删除
numberOfSections
,因为默认值为
1
,其他方法为

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.textLabel?.text = items[indexPath.row].name
    // do something with items[indexPath.row].levels
    return cell
}

您想用本地json文件填充tableview,因此这里有一个简单易行的答案,您只需查看一下


我希望它能为您工作。

很抱歉,文章中的代码非常糟糕且过时。如果存在本机等效项,请勿在Swift中使用
NS…
类。不要在Swift中使用
mutableContainers
,这是毫无意义的。除非您能解释明确需要KVC的原因,否则不要使用
value(forKey
。根本不要使用
NSURLConnection
,它已经被弃用多年了。不要
尝试!
。添加正确的错误处理。