我想将所有API数据显示到表格视图中。它只显示 API 的第一个字典元素

问题描述 投票:0回答:2

我正在通过API获取数据并将其保存到

init
中。当我将这些数据显示到表视图中时,它只显示字典的第一个值。我想将字典的所有值显示到我的表视图中。

班级:

class FetchedDeparment
{
    var depttName: String
    var createdDate: String
    
    init(depttName: String, createdDate: String) {
        
        self.depttName = depttName
        self.createdDate = createdDate
    }
}

从API获取数据并保存

init

var fetchedDepttData = [FetchedDeparment]()
fetchedDepttData = []

self.arrDeptt = json["departments"] as! [[String : Any]]
print(self.arrDeptt)
                        
for eachDepartment in json["departments"]!
{
    let eachData = eachDepartment as! [String: Any]
    let depttName = eachData["name"] as! String
    let createdDate = eachData["created_at"] as! String
                            
    self.fetchedDepttData.append(FetchedDeparment.init(depttName: depttName, createdDate: createdDate))
}
self.tableView.reloadData()

表格视图: 这是我想显示所有数据的地方。

func numberOfSections(in tableView: UITableView) -> Int {
        return fetchedDepttData.count
    }
    
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "DepartmentCell", for: indexPath) as! ShowDepttTVCell
        
        cell.lblDepttName.text = fetchedDepttData[indexPath.row].depttName
        cell.lblCreatedDate.text = fetchedDepttData[indexPath.row].createdDate
        
        return cell
    }
ios swift tableview
2个回答
1
投票

你的代码没问题。您必须将行替换为节,因为您在 numberOfSection 表视图数据源方法中计算了数组。

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

        cell.lblDepttName.text = fetchedDepttData[indexPath.section].depttName
        cell.lblCreatedDate.text = fetchedDepttData[indexPath.section].createdDate

        return cell
    }

1
投票

这就是你要做的 第一的 1. var DataYouWant: [[字符串:任意]] = [字符串:任意] 这是使用 alamofire 提取数据的方法 2.

func demoApi() {
        Alamofire.request("https://jsonplaceholder.typicode.com/posts", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

            switch(response.result) {

            case .success(_):
                guard let json = response.result.value as! [[String:Any]]? else{ return}
                print("Response \(json)")
                for item in json {

                    self.DataYouWant.append(item)

                    // if let title = item["title"] as? String {
                    //   self.titleArray.append(title)
                    // }

                }
                if !self.getAllDetail.isEmpty{
                    DispatchQueue.main.async {
                         self.tableView.reloadData()
                    }
                }
                break

            case .failure(_):
                print("Error")
                break

            }
        }

}
  1. 这就是 numberOfSections 的样子 func numberOfSections(in tableView: UITableView) -> Int { 返回1 }

  2. 然后

    func tableView(_ tableView: UITableView, numberOfRowsInSection 部分: Int) -> Int { 返回 DataYouWant.count }

如果您还有其他问题请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.