struct ApiModel : Hashable ,Codable{
var results : [MovieData]
}
struct MovieData : Hashable, Codable{
var backdrop_path : String?
var original_title : String
var poster_path : String?
var overview : String
var vote_average : Float
}
I have a problem in below line, since this is a published property I need to initialise it in accordance to the ApiModel, but I don't know how to
class ApiViewModel: ObservableObject{
@Published var movies: ApiModel =
func fetchData(){
guard let url = URL(string: urlLink) else {return}
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {return}
do {
let movies = try JSONDecoder().decode([ApiModel].self, from: data)
DispatchQueue.main.async {
self.movies = movies
//print(movies[0].original_title)
}
}
catch{
print("error found \(error.localizedDescription)")
}
}.resume()
}
}
CodePudding user response:
struct ApiModel : Hashable ,Codable{
var results : [MovieData]
}
struct MovieData : Hashable, Codable{
var backdrop_path : String?
var original_title : String
var poster_path : String?
var overview : String
var vote_average : Float
}
class ApiViewModel: ObservableObject{
@Published var movies = [ApiModel]()
func fetchData(urlLink: String){
guard let url = URL(string: urlLink) else {return}
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {return}
do {
let movies = try JSONDecoder().decode([ApiModel].self, from: data)
DispatchQueue.main.async {
self.movies = movies
print(movies[0].results[0].original_title)
}
}
catch{
print("error found \(error.localizedDescription)")
}
}.resume()
}
}
CodePudding user response:
Change the declaration of the published property to
@Published var movies: [MovieData] = []
since you don’t really need the whole ApiModel and then in fetchData do
self.movies = movies.reults
I assume your decoding code is incorrect and should be
let movies = try JSONDecoder().decode(ApiModel.self, from: data)
