В мире приложений практически все приложения используют веб-сервисы для получения данных из Интернета. Это позволяет пользователю отправлять и получать данные из Интернета. Swift использует URLSession для получения данных из Интернета и использует JSONDecoder для их декодирования. Swift использует Codable, чтобы сделать данные json совместимыми с типами Swift.
В этой статье вы узнаете:
- Что такое URL и как его сделать?
- Создание сетевого запроса
- Как работать с API
- Как декодировать данные с помощью JSONDecoder
- Как использовать протокол Codable
Как создать URL
URL означает универсальный указатель ресурса.
Он состоит из двух компонентов: протокола и домена. Swift позволяет вам определять и изменять запросы, используя тип URL. Тип URL принимает строковый параметр и возвращает необязательный URL.
let url = URL(string: "https://www.gurjit.co")!
Создать сетевой запрос
Swift создает и запускает сетевые запросы через Интернет, используя класс URLSession. Получая доступ к свойству общего типа, URLSession обеспечивает доступ к общему экземпляру.
Метод dataTask объекта URLSession принимает параметры URL и обработчик завершения. Когда dataTask завершается, вызывается замыкание, называемое обработчиком завершения. Данные, ответ и ошибка — это три аргумента обработчика завершения. Если задача с данными выполнена успешно, данные и ответ имеют значение, а в случае неудачи — значение имеет ошибка.
let dataTask = URLSession.shared.dataTask(with: url) { (data, response, error) in if let data = data { print(data) } }
Для выполнения запроса необходимо вызвать методresume() экземпляра задачи с данными.
dataTask.resume()
Результат:
21135 bytes
Поздравляем! Ваш первый сетевой запрос был только что создан, и он прост. Все, что вам нужно для выполнения сетевых запросов через Интернет, — это все, что вам нужно.
Работа с API
API — расшифровывается как интерфейс протокола приложения.
В этом примере мы используем Flickr API для получения данных из Интернета. Вы можете сгенерировать свой собственный ключ API из этой страницы и заменить его api_key в URL-адресе.
let url = URL(string:"https://api.flickr.com/services/rest/?method=flickr. photos.search&api_key=526ada5ee1ea2cf61ac6bd3d3d2f405e&tags=kitten&page=0& format=json&nojsoncallback=1")! let task = URLSession.shared.dataTask(with: url) { (data, response, error) in if let data = data, let string = String(data:data, encoding: .utf8) { print(string) } } task.resume()
Запустите ваше приложение сейчас, и оно напечатает следующий ответ
{ "photos": { "page": 1, "pages": 8736, "perpage": 100, "total": 873595, "photo": [{ "id": "52754631336", "owner": "58526667@N00", "secret": "2ebf0e5d4e", "server": "65535", "farm": 66, "title": "sky 17.03.2023 - gimme 5 !", "ispublic": 1, "isfriend": 0, "isfamily": 0 }, { "id": "52751532069", "owner": "191790606@N07", "secret": "9488e52ec7", "server": "65535", "farm": 66, "title": "in the zone", "ispublic": 1, "isfriend": 0, "isfamily": 0 }, { "id": "52750669402", "owner": "41597157@N00", "secret": "611caee3de", "server": "65535", "farm": 66, "title": "Cassidy as the kitten she was 20 months ago", "ispublic": 1, "isfriend": 0, "isfamily": 0 }, { "id": "52744271259", "owner": "142048314@N07", "secret": "89fe00a23b", "server": "65535", "farm": 66, "title": "Echo&Ember", "ispublic": 1, "isfriend": 0, "isfamily": 0 }] }, "stat": "ok" }
Поздравляем! Вы только что получили свой первый API и теперь можете обрабатывать данные оттуда, ура! Длина обрабатываемых json-данных не имеет значения; важна структура данных. Обработанные данные json могут быть довольно длинными.
Мы разрежем код json, упомянутый выше.
- Значение photos содержит значения page, pages, perpage, total и photo.
- Значение photo содержит массив данных
- Каждое значение фотографии содержит идентификатор, владельца, секрет, сервер, ферму, название, является общедоступным, является другом, является семьей. Каждое значение является либо строкой, либо целым числом.
- И конечное значение status ok указывает на то, что ответ сервера был успешным.
Как использовать кодируемый интерфейс
Swift имеет встроенный протокол под названием Codable, который упрощает работу с API. Протокол Codable преобразует типы данных Json в тип swift.
Работа с протоколом Codable может показаться вам сложной задачей. Эта модель создается в соответствии с ответом Flickr json. Он будет меняться по мере того, как вы будете работать с разными API. Добавьте следующий код в новый файл Swift с именем FlickrImageInfo.swift.
struct FlickrImageInfo: Codable { let photos: FlickrPageResult } struct FlickrPageResult: Codable { let photo: [FlickrUrls] let page: Int let pages: Int let perpage: Int let total: Int } struct FlickrUrls: Codable { let id: String let owner: String let secret: String let server: String let farm: Int }
Этот объект модели будет использоваться в нашем приложении для обработки и отображения данных.
Как декодировать с помощью JSONDecoder
Чтобы преобразовать ответ JSON в тип Swift, мы будем использовать JSONDecoder. Метод decode JSONDecoder принимает два параметра: тип и данные. Это может привести к ошибкам, поэтому используйте try? . Это означает, что функция вернет либо значение, либо ноль.
let url = URL(string:"https://api.flickr.com/services/rest/?method=flickr. photos.search&api_key=526ada5ee1ea2cf61ac6bd3d3d2f405e&tags=kitten&page=0& format=json&nojsoncallback=1")! let task = URLSession.shared.dataTask(with: url) { (data, response, error) in let jsonDecoder = JSONDecoder() if let data = data, let result = try? jsonDecoder.decode(FlickrImageInfo.self, from: data) { print(result) } } task.resume()
Заключение
Вы можете увидеть различные и более сложные данные JSON при взаимодействии с другими API. Не беспокойтесь о длине ответа, просто поймите структуру данных и создайте собственную модель в соответствии с ней.
Чтобы найти новейшие советы и рекомендации по разработке iOS, Xcode и Swift, посетите https://www.gurjit.co.
Спасибо!