SWIFT在表视图控制器上显示过滤的JSON数组

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

我是初学者,目前正在从事这个自我练习的项目。我正在尝试从JSON获取数据并按国家/地区过滤数据(以下仅过滤意大利数据)。然后,我想将此过滤后的数组保存到dataArray并在“表视图”上显示它,但它不起作用。请让我知道我想念的东西。谢谢!

导入基金会导入UIKit导入CoreLocation导入SwiftyJSON

类ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var label1: UILabel!

struct Spot : Decodable {
    let Province: String
    let Country : String
    let Last_Update : String
    let Confirmed : String
    let Deaths : String
    let Recovered : String
    let Latitude : String?
    let Longitude : String?

    enum CodingKeys: String, CodingKey {
        case Province = "Province/State"
        case Country = "Country/Region"
        case Last_Update = "Last Update"
        case Confirmed
        case Deaths
        case Recovered
        case Latitude
        case Longitude
    }
}

@IBOutlet weak var TableView: UITableView!

//Constants

let covid_URL = "https://raw.githubusercontent.com/zmsp/coronavirus-json-api/master/latest.json"
var dataArray : [[String : Any]] = []
let cellReuseIdentifier = "cell"

override func viewDidLoad() {
    super.viewDidLoad()

    self.TableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
    TableView.delegate = self
    TableView.dataSource = self

    getData()

    TableView.reloadData()
}

@IBAction func getButtonPressed(_ sender: UIButton) {



}


//MARK: - Networking

//getData method:
func getData () {

    let url = URL(string: covid_URL)!

    let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
        guard let data = data else { return }
    let decoder = JSONDecoder()

        do {
            let rates = try decoder.decode([Spot].self, from: data)
            let rate = rates.filter { $0.Country == "Italy"}
            let dataArray = rate

            self.TableView.reloadData()
        }

         catch {
            print("Error after loading",error)
        }
    }.resume()

      }

func numberOfSections(in tableView: UITableView) -> NSInteger {
    return 1
}

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

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var dict = dataArray[indexPath.row] as! [String : String]
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")!
    let confirmed = dict["Confirmed"]
    cell.textLabel!.text = confirmed

    return cell
   }

}

json swift xcode uitableview tableview
1个回答
0
投票

请在分配过滤器数据的API调用中从dataArray中删除let关键字。也就是说,

do {
    let rates = try decoder.decode([Spot].self, from: data)
    let rate = rates.filter { $0.Country == "Italy"}
    dataArray = rate
    self.TableView.reloadData()
} catch {
    print("Error after loading",error)
}
© www.soinside.com 2019 - 2024. All rights reserved.