Как я реализую мой запрос JSON API в UITableViewCell? - PullRequest
0 голосов
/ 16 мая 2019

У меня проблема с моим текущим проектом. Прежде всего, мне нравится реализовывать JSON запрос API, который позволяет мне получить заголовок из URL. Проблема: я хочу отобразить данные JSON в UITableViewCell.

Но Xcode выдает следующую ошибку:

Невозможно присвоить типу тип 'FirstViewController.Title'. 'Строка?

Возможно, в моем коде больше неправильного, потому что я новичок в Swift / Xcode

Я уже пробовал это:

cell.textLabel?.text = course.title as? String

Но я получил следующее предупреждение:

Cast from 'FirstViewController.Title' to unrelated type 'String' always fails

Это мой пример кода:

var courses = [Course]()
let cell = "ItemCell"

override func viewDidLoad() {
    super.viewDidLoad()

    fetchJSON()
}

struct Course: Codable {
    let title: Title

    enum CodingKeys: String, CodingKey {
        case title
        case links = "_links"
    }
}

struct Links: Codable {
}

struct Title: Codable {
    let rendered: String
}


fileprivate func fetchJSON() {
    let urlString = "ExampleURL"
    guard let url = URL(string: urlString) else { return }
    URLSession.shared.dataTask(with: url) { (data, _, err) in
        DispatchQueue.main.async {
            if let err = err {
                print("Failed to get data from url:", err)
                return
            }

            guard let data = data else { return }

            do {

                let result = try JSONDecoder().decode(Course.self, from: data)


                self.tableView.reloadData()
            } catch let jsonErr {
                print("Failed to decode:", jsonErr)
            }
        }
        }.resume()
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return courses.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: .value1, reuseIdentifier: "ItemCell")
    let course = courses[indexPath.row]
    cell.textLabel?.text = course.title as? String // Cast from 'FirstViewController.Title' to unrelated type 'String' always fails
    return cell
}

Я просто хочу получить WordPress сообщений в UITableView - UITableViewCell.

Может быть, вы можете сказать мне, если это неправильно, я попробовал, но я не знаю, как решить эту проблему

Заранее спасибо

1 Ответ

0 голосов
/ 16 мая 2019

Назначьте переменную перед перезагрузкой

 let res = try JSONDecoder().decode(Course.self, from: data)
 courses.append(res)
 DispatchQueue.main.async {
     self.tableView.reloadData()
 }

И установите для нее строковое значение

 cell.textLabel?.text = course.title.rendered

 courses = try JSONDecoder().decode([Course].self, from: data)
 print(courses)
...