Пишем простое приложение с помощью API Flickr

Сегодня напишем простое приложение для ios на Swift. Рассмотрим некоторые базовые вещи этого языка и возможности среды разработки xcode. Использовать будем API от flickr.com. Идея приложения в следующем: пользователь вводит с клавиатуры слово, и получает картинку с сайта фликра, которое соответствует этому слову. Понятно, что сейчас ничего не понятно, но к концу статьи мы получим реально работающее приложение. И так, начнем.

Для  начала откроем среду разработки Xcode и создадим простой проект.

Создаем проект Single View App. Это означает в нашем проекте будет один рабочий экран, на котором будут происходить все ключевые действия.

Далее выбираем название проекта, обязательно язык устанавливает на Swift и снимаем все галочки. Далее жмем Некст до самого конца.

Развернем структуру проекта и разберем два файла.

ViewController.swift является как раз основным файлом для кодирования нашего приложения и в частности файла Main.storyboard.

Открыв его мы можем видеть экран телефона, на который необходимо с правого нижнего угла приложения перенести две вьюхи Image View и Text Field. В текстовом поле мы будем вводить слова, а в поле с фотографиями получать соответствующую фотографию.

Теперь можно приступать к кодированию, и это мы будем делать в файле ViewController.

Нам необходимо связать наши поля с кодом. Для этого необходимо нажать на два кружка вверху справа панели Xcode и зажав ctrl и представление перенести его в код.

Дело за малым, осталось закодировать эти представления средствами языка  Swift.

Начнем с написания главной функции searchImage. Именно она будет искать фотографии на сайте Flickr.

Рассмотри подробнее начало функции. Сейчас мы поймем, что язык Swift очень простой.

Функции начинаются с ключевого слова func далее идет название функции и список аргументов. В нашем случае это String  поле text. showLoader это вызов функции, которую мы напишем ниже. В данном случае, наша функция не возвращает никакого значение (void в Java). В Swift значение для возвращающих функций пишется следующим образом:

возвращаемое значение указывается после скобок с параметрами, разделяется стрелкой вправо.

Вернемся к началу нашей главной функции. Далее идет блок формирование текстовых констант. Слово let обозначает константу. После задания констант мы использую операцию конкатенации (+) формируем URL адрес, который обращается к API  Flickr, а именно к функции search. Вы можете просто воспользоваться моей готовой ссылкой, либо перейти на сайт Flickr в раздел для разработчиков, зарегестрироваться и следуя подсказкам настроить любой подходящий вам API. Если вам будет интересно я напишу статью по этому поводу.

Метод text.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? “” позволяет нам использовать при написании запроса не только английские буквы, но и русские. Если мы будем просто передавать параметр с русскими символами или пробелами, то наше приложение не будет работать. Поэтому эта операция нам необходима. В самой последней строчке мы преобразуем нашу строку в URL формат.

?? является аналогом трепанного оператора, но не точно)) На самом деле суть та же, но условием является неравенство значения справа нулу(кстати говоря, null в Swift это nil). Т.е. если текст пустой вернется пустая строчка.

! в конце  URL  означает параметр точно является строковой переменной.

Так как  мы загружаем фотографии с серверов Flickr, нам необходимо создать сессию, подключиться к серверу и получить информацию, записав ее в нужный нам формат. Первая строчка этого блока инициирует подключение по ранее собранному адресу и возвращает значение в data. По запросу мы получим json файл, с информацией которую мы будем использовать для фото.

Далее мы используем несколько блоков guard. На самом деле можно заменить его на конструкцию if-else, но в данном приложении это создаст большое разветвление, которое будет тяжело прочесть. И так, тут мы видим всю простоту Swift. Мы читаем код так, как если бы он был написан на обычном языке.

Если мы получили непустой json файл, то сохраняем его в константу, иначе выводим сообщение с ошибкой. Если этот файл удается сохранить, то как объект json, сохраняем, иначе ошибка. Переводим файл в строку, и получаем только данные с ключом “photos”. После создаем массив из полученных данных, и если этот массив непустой, то получаем первый элемент, берем необходимые для запроса данные и с помощью функции convert создаем URL, перейдя по которому мы получим реальную фотографию. Внутри сессии мы создаем еще одну сессию и передаем полученные данные в наш блок с фотографиями. Закрываем обе сессии. Метод конверт выглядит следующим образом:

Получаем json файл в следующем виде:

Вот и данные для создания URL адреса для запроса фотографии. Из всего массива мы берем только самую первую, сортированную по релевантности. Результат выполнения функции convert для слова Lion выглядит так:

Скопируйте в браузер и посмотрите что получится)

Теперь рассмотрим вспомогательные функции, которые мы использовали и написали.

Для отражения ошибки мы используем стандартное окно с текстом и кнопкой ОК.  Функция показать загрузчик отвечает за запуск вращающего стикера. Его мы добавляем в Main.storyboard и помещаем в середину фотографии.

И так, все готово, осталось только запустить наше приложение. Для того чтобы все сработало нам необходимо создать делегата, который будет запускать функцию поиска

Мы используем стандартное расширение нашего контроллера, который будет вызывать поиск фотографии при нажатии клавиши return на клавиатуре девайса.

Теперь заполним главный метод который запускает весь процесс работы приложения, так же как метод main в java.

В работающим виде приложение выглядит следующим образом

Исходный код можно найти на моем акаете в GitHub: https://github.com/nicholasgribanov/fotosearch

Оставить комментарий:

Ваш email не будет опубликован.