как заполнить ячейки в UITableView с помощью switfyJson из запроса alamofire post

#swift #uitableview #uiviewcontroller #alamofire #swifty-json

Вопрос:

У меня есть Tableviewcontroller, встроенный в Viewcontroller. И я хотел бы заполнить эти 3 ячейки данными из моего запроса alamofire post. какой самый простой способ это сделать? я вижу, что мой запрос на публикацию alamofire напечатан в области отладки. так далеко я зашел до сих пор.

введите описание изображения здесь контроллер просмотра выглядит следующим образом.

 import UIKit import Alamofire import SwiftyJSON  class ViewController: UIViewController {    @IBOutlet weak var tableViewScore: UITableView!    override func viewDidLoad() {  super.viewDidLoad()   getScores()  tableViewScore.delegate = self  tableViewScore.dataSource = self  }  }  public func getScores() {   let URL_SCORES = "http://localhost/projecttitle/v1/scores.php"   let username = "username@projecttitle.com"    //creating parameters for the post request for now.  let parameters: Parameters=[  "username":username  ]    //Sending http post request  AF.request(URL_SCORES, method: .post, parameters: parameters).responseJSON  {  response in  //printing response  print(response)    switch response.result {  case .success (let value):  let json = JSON(value)    for (key,subJson):(String, JSON) in json["scores"] {  debugPrint (key) //key  debugPrint (subJson) //value    debugPrint (subJson["date"]) //value  debugPrint (subJson["coursename"]) //value  debugPrint (subJson["score"]) //value   }  case .failure(let error):  print(error)  }  } }  extension ViewController : UITableViewDataSource{    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -gt; Int {    return count   }    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -gt; UITableViewCell {  let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCellScores    // populate the cells with date, coursename and score   return cell  } } extension UIViewController : UITableViewDelegate{    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -gt; CGFloat {  return 50  }   }  

ячейка UITableViewCell выглядит так.

 import UIKit  class TableViewCellScores: UITableViewCell {    @IBOutlet weak var dateLabel: UILabel!  @IBOutlet weak var courseNameLabel: UILabel!  @IBOutlet weak var scoreLabel: UILabel!    override func awakeFromNib() {  super.awakeFromNib()  // Initialization code  }   override func setSelected(_ selected: Bool, animated: Bool) {  super.setSelected(selected, animated: animated)   // Configure the view for the selected state  } }  

Ответ №1:

Вы можете создать модель с именем «MyModel» за пределами контроллера представления :

 struct MyModel {  let date: String?  let coursename: String?  let score: String? }  

И в вашем контроллере представления определите переменную:

 var myModel = [MyModel]()  

На вашей getScores() функции fill your model :

 for (key,subJson):(String, JSON) in json["scores"] {  debugPrint (key) //key  debugPrint (subJson) //value    debugPrint (subJson["date"]) //value  debugPrint (subJson["coursename"]) //value  debugPrint (subJson["score"]) //value   self.myModel.append(date: subJson["date"], coursename: subJson["coursename"], score: subJson["score"]) }  tableViewScore.reloadData() //reload your tableview end of the for loop   

Вернитесь self.myModel.count на свое место numberOfRowsInSection

Около cellForRowAt :

 cell.dateLabel.text = self.myModel[indexPath.row].date  

Комментарии:

1. в строке self.myModel.append... я получил следующую ошибку «Не удается найти» себя «в области видимости», а в строке с tableViewScore.reloadData() я получил ошибку «Не удается найти «tableViewScore» в области видимости»

2. Напишите свое имя для просмотра таблиц в tableViewScore.reloadData(), также удалите self из self.MyModel.append

3. затем я получаю ошибку «Не удается найти» MyModel «в области видимости», а tableViewScore-это имя моего tableview

4. где определена моя модель?

5. я создал новый файл под названием MyModel. import foundation struct MyModel { let teedate: String? let coursename: String? let golfclubname: String? }