Как я могу получить данные из For в таблицу - PullRequest
0 голосов
/ 05 октября 2019

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

import UIKit

class ViewController: UIViewController, UITableViewDataSource {

    struct Class: Codable {
        let prop_id: String
        let prop_location: String
        let prop_price: String
        enum CodingKeys : String, CodingKey {
            case prop_id = "prop_id"
            case prop_location = "prop_location"
            case prop_price = "prop_price"
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

       // Do any additional setup after loading the view, typically from a nib.
        let url = URL(string: "https://pricepointproperty.co.uk/appServices/service.php")

        // Load the URL
        URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
            // If there are any errors don't try to parse it, show the error
            guard let data = data, error == nil else { print(error!); return }

            let decoder = JSONDecoder()
            let classes = try! decoder.decode([Class].self, from: data)

            // Print out the classes to the console - try sticking this in a table view :)
            for Properties in classes {
                print("\t")
                let id: String = (Properties.prop_id)
                let location: String = (Properties.prop_location)
                let price: String = (Properties.prop_price)
                print(id)
                print(price)
                print(location)
            }
        }).resume()
   }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let myCell = UITableViewCell()
        myCell.textLabel?.text = "location"
        return myCell
    } 
}

1 Ответ

1 голос
/ 06 октября 2019

Я думаю, что ваше определение Class в порядке, перечисление CodingKeys не нужно, но можно оставить его таким.

Для простоты вы можете объявить переменную внутри ViewController извведите [Class], этот массив будет содержать данные, полученные из вашего URL. Когда вы декодируете эти данные, вы сохраняете их в эту переменную, например, вы можете сделать что-то вроде: self?.myData = try! decoder.decode([Class].self, from: data).

Переменная myData объявляется так:

fileprivate var myData = [Class]() {
  didSet {
    // All UI related stuff must run on the main thread
    DispatchQueue.main.async {
      self?.table.reloadData()
    }
  }
}

Использование didSet Наблюдатель свойств - это простой способ перезагрузить данные после обновления переменной.

Для источника данных таблицы вы должны реализовать несколько методов. Сначала тот, который просто возвращает число строк в разделе с одной строкой кода:

return myData.count

И метод, который реализует cellForRowAt, который отключает ячейку и устанавливает информацию о полях соответствующих ячеек. ,Данные для отображения находятся в массиве myData, вы можете использовать indexPath для индексации массива, например:

let dataRow = myData[indexPath.row]

Вы можете посмотреть на очень простой проект, который реализует все это в Github . Единый вид проекта выглядит следующим образом:

enter image description here

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...