Swift 2.0: лучшая практика для связи с REST API с JSON

Я начал мигрировать в Swift и просто понял, что большая часть Sample Code больше не работает в Swift 2.0, и очень трудно попасть в качестве новичка.

Итак, какова наилучшая практика общения с REST API в Swift 2.0 с помощью методов Swift из стандартных библиотек?

Может ли кто-нибудь предоставить Swift 2.0 Code для следующего сценария?

  1. GET JSON Данные из службы
  2. Parse JSON (поэтому его можно использовать в Swift)
  3. Отправить запрос POST с JSON-кодированными данными

Предоставьте решение без рамок. Надеюсь, это поможет всем остальным, кто пытается получить учебники из Интернета для работы над Swift 2.0.

Я тоже новичок, и я не могу сказать, что то, что я делаю, – это лучшая практика, но вот как я обработал запрос GET с использованием NSURLSession и закрытия .

Во-первых, я определил класс NetworkOperation , который будет обрабатывать NSURLSession. Он имеет следующие атрибуты:

lazy var config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() lazy var session: NSURLSession = NSURLSession(configuration: self.config) let queryURL: NSURL 

В инициализаторе я устанавливаю queryURL. Конфигурация и сеансы vars lazy потому что я хочу, чтобы они были инициализированы только тогда, когда используется моя сетевая операция.

Затем у меня есть метод, который выполняет запрос GET и извлекает JSON. Этот метод принимает замыкание как параметры. Это закрытие будет предоставляться вызывающим абонентом и позволяет мне записывать мой запрос dataTask в вызывающий контекст.

 func downloadJSONFromURl(completion: ([String:AnyObject]?) -> ()) { let request = NSURLRequest(URL: queryURL) let dataTask = session.dataTaskWithRequest(request) { (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in // 1: Check HTTP Response for successful GET request guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data else { print("error: not a valid http response") return } switch (httpResponse.statusCode) { case 200: // 2: Create JSON object with data do { let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.AllowFragments) as? [String:AnyObject] // 3: Pass the json back to the completion handler completion(jsonDictionary) } catch { print("error parsing json data") } default: print("GET request got response \(httpResponse.statusCode)") } } dataTask.resume() } 

Этот пример очень прост и не обрабатывает ошибки, но вы можете увидеть, как я разбираю JSON в [String:AnyObject] в блок catch try.

Впоследствии я возвращаю словарь в закрытие с именем completion , которое выполнит необходимую проверку на JSON, а затем преобразует его в объект Swift.

В этом закрытии я использую необязательную привязку для безопасного создания моего объекта. Например, скажем, я беру книгу, и JSON выглядит так: {title: "Some book", author:"J. Doe"}

 if let title = json["author"] as? String, author = json["author"] as? String { let book = Book(title: title, author: author) serviceCompletion(book) } 

Поскольку мне нравятся замыкания, я отправляю конвертированный JSON в другое закрытие, предоставленное службе. Вы можете увидеть полный пример моего github . Это из учебника Treehouse.

Надеюсь, это немного поможет.

Interesting Posts
Давайте будем гением компьютера.