SwiftyJSON Проблемы Swift 2

У меня есть URL-адрес API, который возвращает данные JSON, которые вы можете найти здесь https://itunes.apple.com/us/rss/topmovies/limit=25/json

Я хочу вернуть все названия фильмов в этих данных JSON.

Я использую SwiftyJSON Framework для анализа данных JSON из URL-адреса. Я использую NSURLSession.dataTask, чтобы начать синтаксический анализ с URL-адреса.

Проблема в том, что данные JSON, которые я хочу вернуть, ничего не возвращают.

Вот некоторый код -

URL-адрес данных JSON —

let url = "https://itunes.apple.com/us/rss/topmovies/limit=25/json"

Получение данных JSON

 func getTheJSONData() throws {



    let theURL = NSURL(string: url)

    let request = NSURLRequest(URL: theURL!)


    //let JSONError : NSError?



    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())

    let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in


        do {

            if error == nil{

            let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)

                let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue


                //prints nil..
                print(Name)


            }


        } catch {
            // report error

            print(error)
        }

}
    task.resume()


}

person Jimmy lemieux    schedule 06.10.2015    source источник
comment
Я попробовал ваш код, и он сработал (Xcode 7.0.1)   -  person Eric Aya    schedule 07.10.2015
comment
@ЭрикД. Он напечатал список названий фильмов?   -  person Jimmy lemieux    schedule 07.10.2015
comment
Посмотрите на скриншот, который я связал. Конечно нет, потому что ваш код запрашивает один заголовок. Таким образом, он печатает заголовок. Он не печатает nil, как говорит ваш комментарий в коде.   -  person Eric Aya    schedule 07.10.2015
comment
@ЭрикД. Есть ли способ получить более одного названия фильма?   -  person Jimmy lemieux    schedule 07.10.2015
comment
Да, конечно. :) Я сделал ответ для вас.   -  person Eric Aya    schedule 07.10.2015


Ответы (1)


Ваш код делает именно то, что должен: он печатает название фильма.

С этим:

let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue
print(Name)

вы получаете название одного фильма, потому что вы получаете первый элемент массива с [0].

Поскольку вы хотите получить все названия фильмов, вместо работы с первым элементом работайте со всеми элементами. Пример:

let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)

let movies = swiftyJSON["feed"]["entry"].arrayValue

let titles = movies.map { $0["im:name"]["label"].stringValue }

print(titles)

print(titles) дает массив заголовков:

[«Мир Юрского периода», «Мстители: Эра Альтрона», «Шпион», «Антураж», «Пиксели», «Фронинг», «Идеальный голос 2», «Земля картелей», «Аладдин», «Форсаж 7 (расширенный Edition)», «Супер Майк XXL», «71 год», «Эпоха Адалин», «Изгой», «Золушка (2015)», «Сан-Андреас», «Безумный Макс: Дорога ярости», «Отель Трансильвания», «Паддингтон», «Миссия невыполнима — Протокол Фантом», «Алоха», «Наркотик», «Человек на проводе», «Я, Эрл и умирающая девушка», «Ночь»]

Кстати, как говорит компилятор с предупреждением, нет необходимости использовать do catch вместо JSON(), потому что он не выбрасывает.

person Eric Aya    schedule 06.10.2015