Когда я начинал работать со 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"]

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

Комментарии (2)


  1. fsmorygo
    02.12.2015 10:08

    Ну, ни о чём.

    Плюс, еще и форматирование разъехалось.


  1. complexityclass
    02.12.2015 10:28

    Статья не юниора, а совсем новичка скорее, хотя бы переменные с большой буквы уж не называли бы. Ну и материалов по работе с json в swift огромное количество.