Итак, продолжим знакомство с простым и интересным языком Swift. В прошлый раз мы познали базовые команды и функции перспективного языка программирования. А теперь сделаем своё первое приложение!
Как создать приложение для iOS
Сегодня мы сделаем простое приложение для расчета индекса массы тела и необходимого количества калорий для поддержания веса. Для этого будем использовать формулы Гарисса Бенедикта и индекса массы тела.
1. Для начала давайте создадим проект: запустите Xcode и нажмите комбинацию клавиш CMD+Shift+N или выберите в меню File->New->Project
2. Теперь выберите Tabbed Application и нажмите Next.
3. На этом этапе надо придумать имя для приложения (Product Name), нажать Next и выбрать папку для сохранения. Параметры Organization Name и Organization Identifier можете не менять.
Главное, чтобы значение в поле Language было равно Swift.
4. После того, как вы сохраните проект, перед вами появится рабочее пространство Xcode.
Слева у вас будет панель Navigator, а справа — Utilities. В каждой из этих панелей есть свои вкладки, которые позволяют получить доступ к различным функциям.
Например, первая влкадка в панеле Navigator показывает список файлов проекта, третья позволяет производить поиск по проекту и так далее.
5. Найдите в списке файлов проектов файл с именем Main.storyboard и нажмите на него.
Файл Main.storyboad определяет, какие экраны (контроллеры) есть в приложении. Вы можете добавлять элементы на экраны, задавать связи между экранами и так далее.
Если вы выберите какой-нибудь контроллер, он подсветится синей рамкой:
После того, как контроллер выбран, его свойства начнут отображаться в панели Utilities. Например, контроллеру можно поменять размер, выбрав другое значение в поле Size.
6. Запустим наше шаблонное приложение и посмотрим, как оно выглядит в симуляторе. Для этого надо в верхнем левом углу выбрать тип симулируемого устройства и нажать комбинацию клавиш CMD+R или кнопку с икокой Play.
Как видите, у нас есть приложение с двумя экранами, преключение между которым осуществляется при помощи таб-бара.

7. Нужно переименовать название табов. Для того, чтобы это сделать, надо выбрать таб, кликнув на него или выбрав его в иерархии элементов управления.
После того как таб будет выбран, он подсветится зеленым цветом.
8. Теперь в панели Utilities выбирайте Attributes Inspector и меняйте значение в поле Title на BMR/BMI для первого таба и Килокалории для второго.
Сейчас на первом контролере размещены всякие надписи. Их надо удалить. Для этого выделите их и нажмите Delete.
9. Теперь добавим свои элементы управления. Внизу панели Utilities есть Object Library, в которой можно выбрать объекты и добавить их к сцене. Найдите объект Label и перетащите его на контроллер BMR/BMI. Перед этим не забудьте два раза тапнуть на сцене, чтобы масштаб стал стандартным.
Должно получиться примерно так.
В панели Utilities можно поменять текст, размер шрифта и так далее.
10. Перетащите еще несколько лейблов и поставьте им такой же текст, как и на картинке. Для последнего лейбла нужно поставить Lines в 2, чтобы текст переносился на другую строку.
11. Теперь добавьте 3 текстовых поля (Text Field).
И разместите их, как на картинке.
У текстовых полей поставьте параметр keyboard type в Number Pad.
И установите текст по умолчанию.
12. Теперь добавим элементы управления для выбора пола и кол-ва тренировок в неделю. В Object Library ищете Segmented Control и добавляйте на экран.
У Segmented Control можно менять количество сегментов и текст для каждого сегмента.
Сделайте так, чтобы сегменты выглядели, как на скриншоте.
13. Теперь добавьте кнопку (button).
И установите ей заголовок.

После этого добавьте еще один label с lines равным 4.
14. Выберите контроллер BMI/BMR, нажмите два пересекающихся кольца в правом верхнем углу и откроется Assistant Editor. Он показывает код, ассоцированный с этим контроллером.
15. Протащим элементы управления.
Для этого выберите первый text field (в нашем случае это будет возраст), нажмите Ctrl, кликните на него еще раз и, не отпуская кнопки, перетащите внутрь класса. Если все сделано правильно, то вы увидите посказку “Insert Outlet, Action, …”.
Теперь отпустите курсор, и вы увидете окошко для создания связи. В качестве имени введите ageTextField и нажмите Connect.
16. У вас появится переменная ageTextField.
Проделайте эту процедуру для оставшихся text field, segmented controls и label с текстовым результатом. У вас должно получиться так:
Теперь протащите кнопку, но тип соединения укажите не Outlet, а Action. И в качестве имени используйте calculateTapped.
17. Теперь скопируйте следующий код в метод calculateTapped.
Этот код выполняет расчет и выводит результат на экран.
18. Пришло время подвести итог. Давайте запустим и проверим:
Ваша первая программа готова! Молодцы!
Задавайте вопросы
Если что-то не получается по ходу дела, пишите в комментарии. Специально для этого мы пронумеровали каждый пункт. На все вопросы ответят разработчики-профессионалы из команды, так что не стесняйтесь.
Над текстом трудился Руслан Гуменный — ведущий разработчик e-Legion. Компания является лидером на рынке заказной мобильной разработки в Европе, входит в состав холдинга DZ Systems. За 9 лет существования были созданы приложения для РайффайзенБанка, Яндекса, BMW, Банка Москвы, Первого Канала, Aviasales, Sports.ru, ВГТРК, Mail.Ru Group и многих других компаний.
Если вы шарите в теме и вам есть, что добавить, не стесняйтесь – пишите в редакцию со своими статьями на тему разработки приложений. В следующем выпуске подробнее рассмотрим, что было сделано и доработаем приложение, подготовив его к публикации. Так что подготовьтесь заранее, сделав домашнее задание :)
Уверен, все остальные давно мечтали «сделать свое приложение для айфона». Это ваш шанс. До скорых встреч в следующих статьях цикла!
48 комментариев
Форум →ох… какая чудовищная статья… просто чудовищная…
@iChernovik, дорогие авторы, если раньше вы сыпали в кучу КУРСИВ, пОлУжИрНыЙ и устраивали прочие игрища шрифтов, заставляя читателей рыдать кровавыми слезами, то сегодня вы превзошли себя. Кроме чудовищной, дичайшей чехарды шрифтов и выделений вы решили добавить вишенку на торте – гигантские скриншоты с разными масштабами, разбавленными просто утонувшими в них строчками комментариев. Я уже не говорю, что половина действий привязана к одному и тому же скриншоту, хотя описывают указанное на скриншоте в разных ситуациях и в разных режимах (например connect при провязке IBOutlet) становится активной только когда имя переменной уже введено, а на скриншоте эта кнопка просто неактивна… Я извиняюсь, но ЭТО читать просто невозможно.
@iChernovik, я уж не говорю просто об ошибках в тексте. “контроллер BMR/BMI” – у вас BMR/BMI не контроллер, а элемент интерфейса – UIBarButtonItem. Контроллер BMR/BMI – это код, этим элементом интерфейса управляющий…
Why?
типичный пример “как не надо программировать”, причем в чем угодно…
нет, я конечно понимаю, здравствуй мир и все такое … Но сразу приучать создавать мешанину с вычислениями/алгоритмикой и интерфейсными методами…
MVC-подход канул в Лету теперь?
Короче говоря, как пример работы с элементами визуального интерфейса – гуд, как пример подхода к написанию программы – тихий ужас.
@cd_racer, это будущее, которое планомерно наступает. Программирование перестанет быть уделом “избранных”, и в вашем понимании(как и в моем) “испохабится” до визуального программирования.
@Cegou6, программирование никогда не было уделом избранных. Чтобы разбираться в программировании достаточно выучить и понять 3 основных оператора во всех языка программирования, понять принцип объектной модели и нужно обладать логикой и основами математики. Все.
@Cegou6, нене, “избранность” программирования – некорректный термин. Это как “избранность” машиниста поезда или пилота самолета.
Программирование – это обычное ремесло. Создание продукта (идея/архитектура/интерфейс) – это искусство в бОльшей степени. Н и там нужны определенные навыки и знания.
Потом не стоит путать программирование, как способ решения своих прикладных задач с использованием вычислительной техники, с программированием для создания рыночного продукта. Разные уровни сложности/качества и тп.
Кстати, визуальное программирование вполне в рамках парадигм работает, даже местами приструняет шаловливые ручки, ибо некоторые вещи просто недоступны :)
@cd_racer, ну зачем сюда лезть с архитекурой сразу? Первое приложение же, которое вы пишите для себя максимально просто и быстро (во всех смыслах).
@lookinway, максимально просто и быстро и ничего не понятно.
можно было залить весь проект и каждый сам собрал бы, было бы еще проще, настолько же непонятно.
урок как нарисовать два экрана интерфейса, но про сам Swift ни слова. вставьте код и у вас все получится…
судя по такому уроку Swift проще Logo, но даже там, первая программа – “Привет мир!” не нравится, замените на яблоки, ну или добавьте свое.
но расскажите про сам язык, а не как нарисовать два экрана с готовым кодом
var bmr: Double = 0
var bmi: Double = 0
вот эти вары, что значат? и что они дублируют? и почему дубль вар равен нулю? :)
@lookinway, во-первых 80% приложений тех, кто начинал с подобных примеров – это как раз их видоизмененный код. Поэтому лучше сразу делать все красиво, нежели потом заставлять человека мучаться. Кстати, красиво != сложно.
во-вторых – просто и быстро в моменте не означает, что дальше программу будет так же легко менять и дорабатывать. Иногда просто шуруп плоскогубцами вколотить. Вся разница в технологичности. Как раз товары дядюшки Ляо этим и отличаются: чем меньше кустарщины, тем выше качество.
Потом не стоит путать продукт для рынка и поделку для себя.
@cd_racer, прототипы для того и нужны чтобы их быстро создать, а потом выкинуть.
@Silmaril, прототипы продают с аукционов :)))
@cd_racer, когда ребенок приходит в первый класс он учится писать буквы и правильно рисует закорючки а не изучает деепричастные обороты в сложноподчиненных предложениях. Аналогию думаю проведете. Во всех уроках мвц объясняется уроку к 4 минимум
@goodhoopoe, вообще-то учится писать буквы, но соблюдая правила
а тут не буквы дали, а сразу отрывок из Руслана и Людмилы, перебор
Хм… ну и, кажется, в статье “как программировать под Swift” должна быть написана хотя бы строчка кода на Swift, нет? Тут у нас – автоматическое пробрасывание IBOutlet и IBAction + “скопируйте вот этот код” – ну какое же это программирование? :(
в принципе нормально, простое приложение в котором все основные возможности начального уровня освещены. МVС на мой взгляд не нужный для простых приложений хлам и изнасилование мозга. ООП формы-кнопочки отлично подходит для простых интерфейсов пользователя. Лучше в дальнейшем сделать игру тем более что там есть заготовка именно приложение типа Игра! Теннис или пинг-понг например, или разбивалка кирпичной стены. Интересно как там в свите со спрайтами и коллизиями столкновений? Как со звуком работать? Самому лень читать книжку… вот мастера-практики разжуют и это будет хорошо!
@beginerX, ну пример в статье – это классический процедурный подход, ООП там и не пахнет.
@cd_racer, в статье вообще не пахнет программированием. Просто накидали кнопочек и скопировали пару строк кода, даже не объясняя что там делается. По сути это урок не о том как программировать на Swift, а о том как пользоваться Interface Builder’ом. Все тоже самое можно сделать точно такими же шагами и в Objective-C
@cd_racer, кнопочка это объект на экране или на форме, экран и форма тоже объекты, так что это четкий кристально чистый ООП не замутненный кривизной ситнаксических выкрутасов
@beginerX, ???? мама моя … да переменная int i тоже объект при такой мотивировке, и тип данных, и кнопочка на клавиатуре, и даже тот, кто ее жмет.
ООП – это концепция программирования. Использование в программе объектов еще не значит, что программа построена сообразно принципам ООП. Ну это-то уж надо понимать.
Кстати, было про первый класс и буквы … Вот как раз с принципов и надо было начать, а так ООП остается пустой аббревиатурой.
@cd_racer, ну ты лох, int во мноших языках является полноценным объектом, ты дебил. Повторю для тупых – Сфивт это ООП язык.
@beginerX, о, в каждом слове читается профессионал с большой буквы 3.14, прямо новый Страуструп вылупился…. Вес наберет и ого-го… :)) Осталось всего ничего: кроме букв и отдельных слов смысл написанного такому гению понимать научиться.
Иначе по сути-то, гляжу, нечего возразить :))
Это все замечательно, но в следующем выпуске планируете добавить например сохранение данных? То есть чтобы приложение не открывалось каждый раз как с нуля.
Я это к чему – руководств типа “пишем первое приложение” для iOS в интернете просто тонны уже. Но все как одно – создали проект, натакали элементиков, связали с кодом, написали функцию-считалку. И все, на этом руководство заканчивается. Кажется, пойду тоже попробую свое написать. А понимаешь что ничего маломальски полезного даже для себя с такими знаниями не напишешь.
Хоть бы кто заморочился вопросом – а теперь сохраним введенные данные для следующего запуска приложения. Вот тут уже фантазия дальше может развернуться в плане применения
И еще было бы неплохо ссылки на хорошее описание API. Чтобы заинтерисовавшиеся легко могли дальше идти копать
@D@rkmind, ссылка на лучшее апи developer.apple.com
@D@rkmind, полностью согласен, в Интернете тысячи примеров, все как один показывают как накидать интерфейс, да там показывать то не надо ничего, тяни мышкой и все.
А как чуть глубже, так у всех проблемы: например показать работу с данными в базе MySQL, загрузка и выгрузка записей, загрузка и выгрузка изображений из базы.
Это вообще один из самых главный моментов, потому как все крутиться вокруг данный твоей организации.
@MaIronCool, зайдите на Udemy. Если хотите объемный курс, то заплатите за него. Писать объемные уроки бесплатно не хочет никто.
@MaIronCool, в нормальных организациях не дают доступ к базе извне, а только на уровне апи, ибо любое приложение можно же компилировать и получить доступ к бж, апи декомпилировать не получится
Есть несколько замечаний, которые думаю будут интересны новичкам: имхо стоило объяснить отличие iboutlet от ibaction. Рассказать чем отличаются закрашенные точки напротив iboutlet от незакрашенных. А так же исправить пункт 5. Сторибоарды действительно отображают экраны(сцены) но ни не являются контролерами, ведь при создании шаблонного приложения экран автоматически связывается с контроллером и поэтому есть возможно с помощью драгндропа перекидывать элементы в код для создания аутлетов и экшнов. Если же экран не связан с контроллером, то драгндроп просто не сработает(когда только начинал изучать язык для меня это было жестким затыком, я вручную добавлял контроллеры на сторибоард)
Круглый ноль в программировании. Как раз хотел попробовать создать программку, которая рассчитывала бы коэффициент. В таблицах не очень удобно, хочется отдельное приложение. Наде не знаю, хватит ли сил и упорства…
@ureozu, мои соболезнования…
Тема крутая. Буду пробовать на выходных.
O JA…JA !!!!
Хотелось бы попросить автора посоветовать литературу для самостоятельного изучения. И вообще, насколько реально дома научиться кодить на более менее вменяемом уровне?
@Pz., присоединяюсь.
@Pz., вполне реально научится кодить дома, я думаю многие с этого начинали, все упирается во время,
Для начала можно недельку почитать введение и базовые принципы объектно-ориентированного программирования, что бы быть в курсе, что такое функции, классы, наследование, переменные, выход из функции, циклы.
Потом можно посмотреть ролики на ютубе, типа «начинаем программировать в XCode».
Так же можно поставить перед собой задачу, а потом попытаться решить её, в процессе решения, очень много вопросов возникнет.
Ну а вообще, если действительно хорошо освоить среду, это надо несколько лет, причем заниматься этим плотно.
@Pz.,
http://www.raywenderlich.com/ — отличный сайт с кучей туториалов
http://www.objc.io/ — ежемесячный журнал в каждом выпуске которого, очень глубоко разбирают какую-нибудь тему
https://itunes.apple.com/ru/book-series/swift-programming-series/id888896989?mt=11 — учебник по swif от Apple
http://nshipster.com/ — фишки языка/платформы
Все правильно говорят! Давайте конструктивно продолжим эту тему:
В следующем занятии перепишем тот же пример с применением MVC (Model-View-Controller) и добавим persistent store для хранения данных.
Затем надо показать, как данные хранятся в разных видах, Key-Value, SQLite/CoreData и прочих. Как хранить картинки.
Потом очень желательно показать, как осуществить синхронизацию данных через iCloud. Как использовать Parse.
А уж затем перейти к созданию простых игр, да, типа тенниса. Там тоже нужно иметь сохранённые и синхронизированные данные.
@EvgenyTur, А чем вам не MVC в текущем примере? По сути из трех составляющих здесь отсутствует Model. Но как я понимаю в этом уроке автор не добавлял модель по тому что не стояла задача объяснять код. А без этих объяснений моделей не будет
@Silmaril, вообще-то зачастую потом этот model нигде и не добавляется, так и живет, размазанный по интерфейсным методам.
отправил на рецензию. Жду первый миллион.
Скриншоты надо делать еще крупнее.
ИГРЫ ДАВАЙ !!! считалки-сохранялки это все детский лепет никому не нужный. Сейчас актуально толлько ИГРЫ ! Только в играх остался шанс заработать. Причем простые и очень простые мгры, порой голая идея с простой 2D обвязкой бешено выстреливает, например Флэпи бирд, вижу в апсторе много оригинальных простеньких но имеющих огомное кол-во загрузок. Так что автор заканчивай со считалкми, ДАВАЙ ИГРЫ !!! На презентации Эпла кстати была игра и типа ее как-то очень просто по их словам делать и модернизировать на лету.
тем кто хочет SQL-cloud и ид, это все вторично вспомогательно, для игр есть специфические онлайн и офлайн сервисы, но изучать образно говоря Авто-Аптечку и НЕ изучить хотя бы в общих чертах сам Автомобль это глупо.
+100500. И не под swift, а на swift
После вставки кода, появилась куча красных линий с ошибками
Доброго времени суток! Такой вопрос: как можно использовать результат bmr во втором viewcontroller? Я так понимаю здесь нужен delegate?
Спасибо!
Добрый день!У меня такой вопрос: я хочу создать программу, в которой задействован гироскоп, можете поподробней объяснить, как написать код, как его включить в программу или где можно поподробнее почитать об этом
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Как сделать флешку для macOS и Windows одновременно
Можно ли перенести переписку Viber и WhatsApp с Android на iOS?
Почему режим Не беспокоить на iPhone не работает по геолокации
Как поделиться геопозицией iPhone в приложении iMessage
Почему камера iPhone не может сфокусироваться
Почему iPhone не может передать файлы через AirDrop
Как сохранять настройки в стандартном приложении Камера на iPhone
Как добавить второе лицо для разблокировки по Face ID