Когда я начинал работать со Swift и 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/
Добавить комментарий