Как получить вложенный массив внутри массива с помощью Alamofire (Swift) - PullRequest
0 голосов
/ 25 февраля 2019

как можно получить файл JSON в следующем формате:

https://developers.themoviedb.org/3/people/get-popular-people

Alamofire используется для получения данных из онлайн-базы данных.

Я нене знает точно, как отформатировать полученный файл JSON, чтобы во вложенном массиве могли быть сохранены элементы в экземпляре MovieModel (плакат: UIImage, имя: строка, рейтинг: двойной, год: строка, плакат: ссылка: строка, идентификатор: Int)

ОШИБКА: фатальная ошибка: элемент NSArray не соответствует типу элемента Swift Array

Мой код выглядит так:

class MovieModel {

private var _poster: UIImage!
private var _background: UIImage!
private var _name: String! // original_title
private var _overview: String! // overview
private var _rating: Double! // vote_average
private var _year: String!
private var _posterLink: String!
private var _backgroundLink: String!
private var _genres: [Int]!
private var _id: Int!

init(poster: UIImage,
     name: String,
     rating: Double,
     year: String,
     posterLink: String,
     id: Int){

    _poster = poster
    _name = name
    _rating = rating
    _year = year
    _posterLink = posterLink
    _id = id

    getPosterImage()
}

}


class ActorModel {

private var _poster : UIImage!
private var _birthday : String?
private var _known_for_department : String?
private var _deathday : String?
private var _id : Int!
private var _known_for : [MovieModel]?
private var _name : String!
private var _also_known_as : [String]!
private var _gender : Int!
private var _biography : String?
private var _popularity : Double?
private var _place_of_birth : String?
private var _profile_path : String?
private var _adult : Bool!
private var _imdb_id : String!
private var _homepage : String!

init(poster : UIImage, id : Int, known_for: [MovieModel], name: String, popularity : Double, profile_path : String) {
    _poster = poster
    _id = id
    _known_for = known_for
    _name = name
    _popularity = popularity
    _profile_path = profile_path

    getPosterImage()
}
}

func getPopularActors(){

    let url = BASE_URL + "/person/popular?" + API_KEY + LANG + "&page=1"
    self.actorList = []

    Alamofire.request(url).responseJSON {response in
        if let result = response.result.value as? Dictionary<String,Any> {
            if let list = result["results"] as? [Dictionary<String,Any>] {

                for i in list {

                    self.actorList.append(ActorModel(
                        poster: UIImage(),
                        id: i["id"] as! Int,
                        known_for: i["known_for"] as! [MovieModel],
                        name: i["name"] as! String,
                        popularity: i["popularity"] as! Double,
                        profile_path:  "\(self.IMAGE_URL)\(i["profile_path"] as! String)"
                    ))

                }


                if let del = self.actorDelegate {
                    del.transferActors(data: self.actorList)
                }


    }
    }
    }

}

1 Ответ

0 голосов
/ 25 февраля 2019

Вы должны действительно использовать Decodable для этого.Но опираясь на ваше текущее решение:

        for i in list {
            var movieModels = [MovieModel]()
            if let knownForArray = i["_known_for"] as? [[String: Any]] {
                for knownFor in knownForArray {
                    movieModels.append(MovieModel(
                        poster: UIImage(),
                        name: knownFor["name"] as! String,
                        rating: knownFor["rating"] as! Double,
                        ... //And so on
                    ))

                }
            }


            self.actorList.append(ActorModel(
                poster: UIImage(),
                id: i["id"] as! Int,
                known_for: movieModels,
                name: i["name"] as! String,
                popularity: i["popularity"] as! Double,
                profile_path:  "\(self.IMAGE_URL)\(i["profile_path"] as! String)"
            ))

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