JSON и Swift. Способы запросов и работа с обменом данных

от автора

Когда я начинал работать со Swift и JSON, мне нужно было немного информации про их взаимодействие и использование. Я отобрал некоторые способы, которые неплохо позволяют с ними работать.
Готов слушать конструктивную критику, т.к. я еще Юниор и ваши комментарии важны для моего развития в этом плане. Пожалуй, начнем.

Думаю, всем известно как работает обмен данных с сервером. Но если нет — прыгайте под спойлер.

Принцип обмена данных

Работа довольно простая. Для начала, мы отсылаем HTTP запрос на сервер и получаем ответ в виде блока данных. Тут используются разные типы ответов, но мы говорим именно о JSON.

Чтобы отослать запрос на сервер мы используем:

        let urlPath = "http://...)"         let url: NSURL = NSURL(string: urlPath)!         let request: NSURLRequest = NSURLRequest(URL: url)         let connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!          CurData = NSMutableData()         stateConnection = "gettingUrl" // еще вернемся         connection.start() 

Объясняю последовательно:
Первые четыре строчки создает само соединение.
Первые две — сам URL. Остальные — соединение.

CurData — это переменная с типом NSMutableData. Именно она будет хранить блок, получаемый с сервера, но про нее потом. Данной строкой мы чистим ее содержание. Чтобы позже создать новое.

Идем дальше — stateConnection. Тоже переменная, возможно многие осудят ее назначения из-за красоты кода, но я предпочитаю использовать ее так. Для чего она используется — увидите в следующих блоках кода, мы к ней вернемся.
Ну и последняя строчка — это начало соединения, тут все очевидно.

Идем дальше:

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {         self.CurData.appendData(data)     } 

Вот мы и вернулись к CurData. Тут мы ее наполняем данными с облаками. Ничего особенного, просто достаточно запомнить эту функцию.

И тут начинается самое интересное:

fun connectionDidFinishLoading(connection: NSURLConnection!) {         do {             let jsonData = try NSJSONSerialization.JSONObjectWithData(CurData, options:NSJSONReadingOptions.MutableContainers ) as! NSDictionary             print("jsonData: \(jsonData)")               } catch {             // report error         }     } 

Константа jsonData дает нам удобный доступ к блоку данных с сервера в виде NSDictionary. К которой нам легче всего обращаться. Давайте вернемся к нашему stateConnection. Как вы могли заметить, переменная типа String. Она позволяет разделять соединения, ибо функция connectionDidFinishLoading будет единой для всех соединений. Поэтому я придумал такой сверхлегкий способ, может и не красивый.

и в самой функции мы делаем разделение

 do {             let jsonData = try NSJSONSerialization.JSONObjectWithData(CurData, options:NSJSONReadingOptions.MutableContainers ) as! NSDictionary             print("jsonData: \(jsonData)")                     if stateConnectin == "gettingUrl" { }          } catch { 

Но это уже тонкости.

А дальше вы уже можете использовать библиотеку как хотите.

jsonData["name"] 

Вот и собственно весь секрет.

ссылка на оригинал статьи http://habrahabr.ru/post/272109/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *