Когда я начинал работать со Swift и JSON, мне нужно было немного информации про их взаимодействие и использование. Я отобрал некоторые способы, которые неплохо позволяют с ними работать.
Готов слушать конструктивную критику, т.к. я еще Юниор и ваши комментарии важны для моего развития в этом плане. Пожалуй, начнем.
Думаю, всем известно как работает обмен данных с сервером. Но если нет — прыгайте под спойлер.
Чтобы отослать запрос на сервер мы используем:
Объясняю последовательно:
Первые четыре строчки создает само соединение.
Первые две — сам URL. Остальные — соединение.
CurData — это переменная с типом NSMutableData. Именно она будет хранить блок, получаемый с сервера, но про нее потом. Данной строкой мы чистим ее содержание. Чтобы позже создать новое.
Идем дальше — stateConnection. Тоже переменная, возможно многие осудят ее назначения из-за красоты кода, но я предпочитаю использовать ее так. Для чего она используется — увидите в следующих блоках кода, мы к ней вернемся.
Ну и последняя строчка — это начало соединения, тут все очевидно.
Идем дальше:
Вот мы и вернулись к CurData. Тут мы ее наполняем данными с облаками. Ничего особенного, просто достаточно запомнить эту функцию.
И тут начинается самое интересное:
Константа jsonData дает нам удобный доступ к блоку данных с сервера в виде NSDictionary. К которой нам легче всего обращаться. Давайте вернемся к нашему stateConnection. Как вы могли заметить, переменная типа String. Она позволяет разделять соединения, ибо функция connectionDidFinishLoading будет единой для всех соединений. Поэтому я придумал такой сверхлегкий способ, может и не красивый.
и в самой функции мы делаем разделение
Но это уже тонкости.
А дальше вы уже можете использовать библиотеку как хотите.
Вот и собственно весь секрет.
Готов слушать конструктивную критику, т.к. я еще Юниор и ваши комментарии важны для моего развития в этом плане. Пожалуй, начнем.
Думаю, всем известно как работает обмен данных с сервером. Но если нет — прыгайте под спойлер.
Принцип обмена данных
Работа довольно простая. Для начала, мы отсылаем 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)
complexityclass
02.12.2015 10:28Статья не юниора, а совсем новичка скорее, хотя бы переменные с большой буквы уж не называли бы. Ну и материалов по работе с json в swift огромное количество.
fsmorygo
Ну, ни о чём.
Плюс, еще и форматирование разъехалось.