JSONСериализация в SwiftyJSON - PullRequest
       4

JSONСериализация в SwiftyJSON

0 голосов
/ 08 октября 2018

Я пытаюсь использовать SwiftyJSON с моими данными API JSON, но у меня возникают проблемы с пониманием того, как работает преобразование.

Вот ссылка на SwittyJSON Git: https://github.com/SwiftyJSON/SwiftyJSON

Вот мой текущий код:

func newFilms() {

        let apiKey = "12345"
        let url = URL(string: "https://api.themoviedb.org/3/movie/now_playing?api_key=\(apiKey)&language=en-US&page=1")
        let request = URLRequest(
            url: url! as URL,
            cachePolicy: URLRequest.CachePolicy.reloadIgnoringLocalCacheData,
            timeoutInterval: 10 )

        let session = URLSession (
            configuration: URLSessionConfiguration.default,
            delegate: nil,
            delegateQueue: OperationQueue.main
        )

        let task = session.dataTask(with: request, completionHandler: { (dataOrNil, response, error) in
            if let data = dataOrNil {
                if let resposeDictionary = try! JSONSerialization.jsonObject(with: data, options:[]) as? [String: Any] {

                    self.films = (resposeDictionary["results"] as? [String: Any])!
                    print("response: \(resposeDictionary)")
                }

            }

            self.filteredFilms = self.films
            self.filmsCollection.reloadData()

        })


        task.resume()

    }

Вот пример нового SwiftyJSON:

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
print("\(userName)")
//Now you got your value
}

Мой главный вопрос: что будет, когда там написано data: datafromNetworking, я не совсем понимаю, какую часть исходного кода следует реализовать и как использовать его для новой версии.

1 Ответ

0 голосов
/ 08 октября 2018

dataFromNetworking представляет объект data, возвращаемый из dataTask.SwiftyJSON выполняет десериализацию.

Замените

if let data = dataOrNil {
    if let resposeDictionary = try! JSONSerialization.jsonObject(with: data, options:[]) as? [String: Any] {

        self.films = (resposeDictionary["results"] as? [String: Any])!
        print("response: \(resposeDictionary)")
    }
}

на

if let data = dataOrNil {
    do {
        let json = try JSON(data: data)
        self.films = json["results"].dictionaryValue
    } catch { print(error) }
}

Однако в Swift 4 SwiftyJSON устарел в пользу мощного встроенного Codable протокол

...