gpt4 book ai didi

json - 仅在 JSON 之后加载 tableView

转载 作者:行者123 更新时间:2023-11-30 10:57:39 24 4
gpt4 key购买 nike

我意识到在 JSON 完成 block 中调用了 tableView.reloadData() get 来使用收到的数据重新加载 tableView ;我想知道是否有一种方法可以仅在完成 block 完成后加载 tableView 。发生的情况是,tableView 首先加载默认单元格为空,几秒钟后,在完成 block 内调用 reloadData() 方法,然后 tableView 重新加载,数据与自定义单元格一起出现。我只想在收到数据时和之后加载 tableView 。我可以采取什么方法?有没有办法仅在完成后加载 View ?我基本上不想让用户查看空白表格几秒钟并等待数据出现。这是我的 viewController 代码和用于保存数据模型的简单结构。

View Controller :

    import UIKit

class ViewController: UIViewController, UITableViewDataSource {

var users = [User]()
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
do {
guard let data = data else { return }
let recieved = try JSONDecoder().decode([User].self, from: data)
self.users = recieved
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let error as NSError {
print("Error: \(error.description)")
}
}.resume()
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.name.text = users[indexPath.row].name
cell.eMail.text = users[indexPath.row].email
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

}

结构:

    struct User: Decodable {

let id: Int
let name: String
let username: String
let email: String
let company: Company

}

struct Company: Decodable {

let name: String
let catchPhrase: String
let bs: String

}

最佳答案

由于您本质上是在显示数据之前等待网络调用,因此为什么不在表格 View 顶部的 View 上显示微调器或事件指示器,然后在数据成功解析后关闭它(或处理任何错误)。另一种方法是在 View 加载到另一个类中之前请求数据。

关于json - 仅在 JSON 之后加载 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com