Как отобразить значение json для alamofire после запроса в табличном представлении, используя Swift - PullRequest
1 голос
/ 11 октября 2019

я пытаюсь преобразовать данные json в табличное представление для swift 5, а также для версии alamofire 5.2. Я получил свои данные ответов от сервера. Itz также скрывает json, но проблема в том, что я не могу показать свои данные ответов в табличном представлении

class ViewController:  UIViewController, UITableViewDataSource {
    struct User {
           var buzzyuser_id:Int?
           var buzzyuser_image:String?
            var buzzyuser_username:String?

           init(dic:[String: Any]) {
               self.buzzyuser_id = dic["buzzyuser_id"] as? Int
               self.buzzyuser_image = dic["buzzyuser_image"] as? String
               self.buzzyuser_username = dic["buzzyuser_username"] as? String
           }
    }


    @IBOutlet weak var TableView: UITableView!

    private var users = [User] ()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.


        TableView.dataSource = self

        apiload()
    }
    func apiload() {
        let parameters: [String: Any] = ["userid": "1","start":"0"]
                  let url = "https://example.com/sample.php"

             AF.request(url, method: .post, parameters: parameters).responseJSON { response in
                 switch response.result{
                         case .success:
                            //success, do anything


                            if let json = response.value as? [String: Any] {
                                    for item in json {
                                                           // construct your model objects here
                                        self.users.append(User(dic:json))
                                                         }

                            DispatchQueue.main.async {
                              self.TableView.reloadData()
                            }
                            }

                            break
                 case .failure:

                                   return
                               }
             }
    }


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

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return users.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customcell")
        let text = users[indexPath.row]
        return cell!
    }
}

Показано значение отладки, но в списке просмотрены только пустые строки. Я не могу найти ошибку.

1 Ответ

0 голосов
/ 11 октября 2019

ваша проблема здесь

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> 
UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "customcell")
    let text = users[indexPath.row]
    return cell!
}

вы назначаете пользовательское значение параметру "текст", а затем не назначаете никакого значения ячейке табличного представления.

Если выпытаемся ... например, чтобы показать на столе пользователя "buzzyuser_username", то после

let text = user[indexPath.row] 

вы должны добавить

cell?.textLabel?.text = text.buzzyuser_username

Также убедитесь, что вы регистрируете идентификатор "customcell"... если вы хотите загрузить ячейку из файла XIB, вы можете сделать это следующим образом (обратите внимание, что с помощью файла XIB вы также можете создать пользовательский подкласс UITableViewCell и создать строку табличного представления с идентификатором изображения пользователя и именем пользователя (это то, что, я думаю, вы пытаетесь заархивировать)

self.table?.register(UINib.init(nibName: "YOUR_NIB_NAME", bundle: nil), forCellReuseIdentifier: "customcell")

И после регистрации идентификатора повторного использования вы можете использовать его в своем табличном представлении, и если вы также добавили пользовательский класс к своему идентификатору, вы можете принудительно вызвать его. это в вашей реализации источника данных tableview

let cell = tableView.dequeueReusableCell(withIdentifier: "customcell") as! YOUR_CUSTOM_SUBCLASS
...