Во-первых, опубликуйте свой json как код:
{"results":[
{
"title":"The Predator",
"poster_path":"/wMq9kQXTeQCHUZOG4fAe5cAxyUA.jpg",
"overview":"From the outer reaches of space to the small-town streets of suburbia, the hunt comes home. Now, the universe’s most lethal hunters are stronger, smarter and deadlier than ever before, having genetically upgraded themselves with DNA from other species. When a young boy accidentally triggers their return to Earth, only a ragtag crew of ex-soldiers and a disgruntled science teacher can prevent the end of the human race.",
"release_date":"2018-09-13"
}
]
}
Во-вторых, ваш json поврежден.У вас нет запятой между ".... jpg" и "обзор".У вас нет квадратных скобок и фигурных скобок.Откуда вы взяли этот json?
В-третьих, вы неправильно анализируете свой json, более того, вы ожидаете, что ключ будет называться "oreview"
, тогда как в json он называется "overview"
.
Вот как вы должны это сделать:
Измените класс Movie:
class Movie {
var title: String
var overview: String
public init(title: String, overview: String) {
self.title = title
self.overview = overview
}
class func buildFrom(json: [String: Any]) -> Movie? {
let results = json["results"] as! [[String : Any]]
guard let title = results[0]["title"] as? String, let overview = results[0]["overview"] as? String else { return nil }
return Movie(title: title, overview: overview)
}
}
Теперь избавьтесь от всего кода из пользовательской ячейки:
class MovieTableViewCell: UITableViewCell {
@IBOutlet var posterView: UIImageView!
@IBOutlet var title: UILabel!
@IBOutlet var overview: UILabel!
}
Теперь перейдем к вашему viewController:
class MovieViewController: UIViewController {
@IBOutlet var tableMovie: UITableView!
var movie: Movie?
override func viewDidLoad() {
super.viewDidLoad()
self.tableMovie.register(UINib(nibName: "MovieTableViewCell", bundle: nil), forCellReuseIdentifier: "Movie")
self.tableMovie.delegate = self
self.tableMovie.dataSource = self
// Do any additional setup after loading the view.
self.request()
}
func request() {
let token = Token()
Alamofire.request("https://api.themoviedb.org/3/movie/upcoming?api_key=\(token.getToken())").responseJSON { response in
guard let json = response.result.value as? [String : Any] else { return }
self.movie = Movie.buildFrom(json: json)
self.tableMovie.reloadData()
}
}
}
//UITableView Datasource & Delegate methods
extension MovieViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.movie != nil {
return 1
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Movie", for: indexPath) as! MovieTableViewCell
cell.title = self.movie.title
cell.overview = self.movie.overview
return cell
}
}
Это должно сделать это.Если вы вставили свой JSON неправильно, и это на самом деле JSON с более чем 1 фильмом внутри, то в коде потребуются некоторые изменения.Дайте мне знать, и я изменю свой ответ.Кроме того, не забудьте обновить свой JSON в вопросе.Удачи!