0

我当前的项目有问题。首先,我喜欢实现一个JSONAPI 请求,它允许我从 URL 中获取标题。问题:我想将JSON数据显示为UITableViewCell.

Xcode抛出以下错误:

无法将“FirstViewController.Title”类型的值分配给“String?”

也许我的代码有更多错误,因为我只是 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

也许你可以告诉我我尝试的方法是否错误,但我真的不知道我是如何解决这个问题的

先感谢您

4

1 回答 1

-1

在重新加载之前分配 var

 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)
于 2019-05-16T11:28:07.620 回答