18 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Использование ReSwift: написание приложения Memory Game

Разработка Как программировать под Swift. Делаем первое приложение

Итак, продолжим знакомство с простым и интересным языком 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. Пришло время подвести итог. Давайте запустим и проверим:

Ваша первая программа готова! Молодцы!

Задавайте вопросы

Если что-то не получается по ходу дела, пишите в комментарии. Специально для этого мы пронумеровали каждый пункт. На все вопросы ответят разработчики-профессионалы из команды, так что не стесняйтесь.

Читать еще:  Тестирование производительности браузеров с помощью сервиса Browserbench.Org

Над текстом трудился Руслан Гуменный — ведущий разработчик e-Legion. Компания является лидером на рынке заказной мобильной разработки в Европе, входит в состав холдинга DZ Systems. За 9 лет существования были созданы приложения для РайффайзенБанка, Яндекса, BMW, Банка Москвы, Первого Канала, Aviasales, Sports.ru, ВГТРК, Mail.Ru Group и многих других компаний.

Если вы шарите в теме и вам есть, что добавить, не стесняйтесь – пишите в редакцию со своими статьями на тему разработки приложений. В следующем выпуске подробнее рассмотрим, что было сделано и доработаем приложение, подготовив его к публикации. Так что подготовьтесь заранее, сделав домашнее задание 🙂

Уверен, все остальные давно мечтали «сделать свое приложение для айфона». Это ваш шанс. До скорых встреч в следующих статьях цикла!

Интересные материалы для разработчика мобильных приложений #202 (19-25 февраля)

На этой неделе в нашей подборке виртуальная реальность, Flutter, спринты и структуры команд, софт-лонч, анимации и дизайн, инструменты и много другого интересного.

Android-разработчики могут знать Давида Гонсалеса в связи с несколькими разными вещами. Например, он участвует в open source-проекте Android Architecture Blueprints, где разные архитектурные подходы демонстрируются на конкретных примерах (недавно проект преодолел рубеж в 25 000 GitHub-звёзд). А также выступает с докладами, занимается бельгийской Kotlin User Group, ранее активно писал блог-посты — в общем, помогает сообществу многими способами, и звание Google Developer Expert неудивительно.

iOS

  • Использование ReSwift: написание приложения Memory Game
  • Cетевой слой в iOS-приложении
  • В App Store теперь 10 скриншотов
  • Apple требует поддержки Super Retina и iOS 11 SDK
  • Первая игра для iPhone без навыков программирования
  • Карта развития iOS-разработчика
  • Навигация в Swift
  • Работа с Metal в Swift 3
  • Связь WKWebView с нативным кодом
  • PromiseKit 6.0: фреймворк для асинхронного программирования

Android

  • Непрерывные переходы между общими элементами: из RecyclerView во ViewPager
  • Альтернатива платному отключению рекламы в бесплатном приложении Android
  • Как сохранить заряд смартфона?
  • Создание анимации в 7 строк кода
  • Как мы сократили размер приложения с 31 МБ до 2 МБ
  • Сокеты в Android
  • Асинхронная работа на Android
  • Стили в Values.xml: боремся с этим страшным существом
  • Лучший способ сделать Splash Screen на Android
  • Как отправлять пуш-уведомления через Firebase на Android
  • Сложные Android-анимации на RxJava
  • Загадка медленного рендеринга в Android-приложении
  • GithubFollows: MVVM, clean architecture и материальный дизайн с анимациями
  • Scripto: Java-JavaScript мост

Разработка

  • Рассуждения на тему виртуальной реальности
  • Дизайн должен быть для людей, а не для дизайнеров
  • UX-кинотеатр – Эмоции. Чувства. Интервью
  • QA на CodeFest: будущее, iOS-фермы и backdoor’ы
  • Пять причин проникнуться симпатией к Flutter
  • Почему ваше приложение выглядит лучше в Sketch
  • Создание двухмерных эффектов частиц в Unity3D
  • Как iOS и Android разделили мобильный рынок
  • Почему структура команды разработки может вас замедлять
  • Открыта регистрация на F8 2018
  • HoloGroup выпускает редактор “голографических экскурсий”
  • IBM и Unity дают доступ к Watson
  • Как начать работать с Flutter
  • Действительно ли за один спринт нельзя ничего успеть?
  • Nuance прекращает развитие клавиатуры Swype
  • Pro Indie Dev: онлайн конференция про инди разработку
  • Подкаст AppTractor: студия Live Typing
  • Podlodka #46: Protocol-Oriented Programming
  • Главные конференции для мобильных разработчиков в США и Европе
  • Сваг для разработчиков
  • 11 вещей, которые надо знать о мобильных взаимодействиях
  • Главные мобильные Continuous Integration (CI/CD) инструменты
  • 10 интерфейсов приложений для вашего вдохновения

Аналитика, маркетинг и монетизация

  • AppsFlyer Performance Index за второе полугодие 2017
  • Как достичь быстрого продвижения: тренды продвижения в Google Play и App Store 2018
  • В myTarget заработал таргетинг на основе психотипа
  • 8 советов по управлению игровым сообществом от Kongregate
  • Как устроен софт-лонч: разбор от Zorka.Mobi и Nitro Games
  • Криптоигры после криптокотят: хиты на $500,000 и больше
  • Ведущие Cost Per Install сети в 2018
  • Как продавать “ПО как сервис”
  • Как маркетинг повышает вовлеченность в F2P играх
  • Использование психологии для создания аддиктивных игр

Swift Часть 1: Быстрый старт

Swift Часть 1: Быстрый старт

Эта статья будет полезна как новичкам, так и опытным программистам. Если вы новичок, то Swift отлично подходит на роль первого ЯП, а если вы гуру, то никогда не бывает лишним закрепить свои знания. Здесь каждый найдет для себя, что-то полезное.

Хотя этот туториал и не займет много времени, в нем вы познакомитесь со всем самым необходимым: переменными, управлением потока, классами, лучшими практиками и многим другим. Также, в конце обучения, мы попробуем написать наше первое (а для кого-то нет) приложение.

Для того чтобы благополучно пройти этот туториал, вам понадобится версия Xcode не ниже 6.1.1 (версия Xcode на время написания статьи).

Привет, Playground!

При запуске Xcode 6 мы увидим вот что:

Нажимаем на Get started with playground, даем свое имя и жмем Далее (вариант выбора платформы на данном этапе нас не интересует). Сохраняем наш playground в удобном для вас месте и приступаем.

Читать еще:  Стек с использованием связанного списка на Java

Мы создали новый тип Playground файла, который позволяет нам тестировать Swift-код и моментально видеть результат. К примеру, попробуйте добавить следующие строчки кода в ваш Playground:

Спорим, что как только вы написали эти три строчки, вы сразу увидели результат работы в правой части? Это очень удобно, не так ли?

Playground – лучший инструмент для изучения языка. Вы можете экспериментировать с кодом, работать с новыми API (наборами классами и процедур), отрабатывать свои алгоритмы или визуализировать ваши идеи. До конца этого туториала мы будем работать в этой «игровой площадке».

Заметка

Перенесите файл SwiftPlaygorund.playground на панель быстрого запуска. Таким образом, вы всегда сможете быстро его открыть для тестирования вашего кода на Swift.

Переменные и константы в Swift

Попробуйте добавить следующую строку в конец вашего кода в Playground:

Вы сразу можете обратить внимание на ошибку, все дело в том, что totalItem – константа, а это означает, что ее значение не может быть изменено. Мы объявляем константы с помощью ключевого слова let . Если вы хотите, чтобы значение totalItem менялось, то можно объявить его с помощью ключевого слова обозначения переменной var, вместо let . Изменив нашу строку, получаем результат:

Сейчас наш код исполняется без ошибок! Вы наверное думаете: “А почему бы всегда не использовать var вместо let , раз он менее строгий?” Все дело в том, что Swift – язык строгой типизации, и в Apple нам советуют применять var только в тех случаях, когда это действительно необходимо. Подобные правила помогают в оптимизации кода при компиляции приложения.

Явная и неявная типизация

Таким образом мы не указываем явно типы для этих констант и переменных, потому что компилятор имеет достаточно информации для того, чтобы эти типы вывести автоматически.

К примеру, мы указали значение для tutorialTeam равное 56 , таким образом компилятор знает, что 56 принадлежит к типу Int , поэтому и tutorialTeam , так же будет принадлежать к Int .

Вообще, вы можете указать тип явно, если хотите. Попробуйте заменить строку объявления tutorialTeam на следующую:

Вы можете задаться вопросом: “Как же все-таки лучше делать: указывать тип явно или позволить компилятору его вывести самостоятельно?» – лучшей практикой считается, позволить Swift вывести тип автоматически. Это сделает ваш код более коротким и читабельным, что соответствует философии нового языка от Apple и благоприятно скажется на оптимизации вашего кода.

Мы выяснили, что в данном случае лучшей практикой для нас будет указывать тип переменной лишь при необходимости, поэтому, удаляем Int :

Базовые типы и управление потоком в Swift

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

Float и Double

Давайте попробуем вставить еще пару строк в конец нашей игровой площадки и познакомимся с базовыми типами Float и Double :

Есть два типа для работы с числами с плавающей точкой: Float и Double :

  • Double – представляет собой 64-битное число с плавающей точкой. Используйте его когда число с плавающей точкой должно быть очень большим или чрезвычайно точным
  • Float – представляет собой 32-битное число с плавающей точкой. Используйте его, когда значение не нуждается в 64-битной точности.

Тип Double – более точный, чем Float и является типом по умолчанию. Это значит, что константа priceInferred , является так же типом Double . Поэтому, если мы хотим заменить тип Double на тип Float , мы должны написать следующее:

Вписываем себе пример констант логического типа Bool :

Обратите внимание, что логические значения в Swift имеют значения true или false , в отличии от YES/NO в Objective-C. Так же как с Int и Double , вам не нужно указывать константы или переменные как Bool , если при создании вы присвоили им значения true или false .

String

Подобрались к строковым значениям:

Обратите внимание, что больше мы не используем символ @ как в Objective-C.

Конструкции If и интерполяция строк

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

Так, в примере выше есть новая техника, называемая интерполяция строк. Если вы захотите вставить что-то в строку, что может быть заменено по значению, то вы должны использовать вот такой простой синтаксис: “(ваше выражение)” .

Вы можете наблюдать работу функции print() в боковой панели, но это может быть проблематично, если ваша строка длинная. Для того, чтобы увидеть результат полностью вам нужно нажать на пиктограмму глаза, в правой части playground’а, который появится при наведении на строку результата:

Есть и другой способ посмотреть длинное значение выражения. Вам нужно пройти в главное меню Xcode (то, что наверху) ViewAssistant EditorShow Assistant Editor.

Читать еще:  Как пользоваться MobaLiveCD

Assistant Editor покажет вам результат работы функции print() без наведения на строку результата, что согласитесь, само по себе проще. Если вы что-то не поняли, то можете скачать наш файл playground’а со всем кодом что был написан выше.

Классы и Методы

Одна из самых частых вещей, которую вы будете делать при разработке приложении на Swift – создание классов и методов. Удалите все, что написали ранее в файл нашего playground’а.

Далее, мы создадим класс, который поможет нам, допустим, посчитать количество чаевых, которые мы должны оставить в ресторане.

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

Если вы создаете субкласс, то после имени субкласса, вам нужно поставить двоеточие и имя суперкласса. В отличии от Objective-C в Swift вам не нужно постоянно писать суперкласс NSObject или что-то другое. Добавьте в фигурные скобки следующее:

После того, как вы добавите этот код, вы получите несколько ошибок, не переживайте, мы скоро их исправим.

Свойства класса создаются точно так же как и просто константы или переменные. Здесь мы создали три константных свойства: первое – счет после уплаты налогов, второе – налоги, третье – счет до уплаты налогов.

Обратите внимание, что вы обязаны указывать начальное значение для свойств при их объявлении, также, вы можете указать их в инициализаторе. Но мы не сделали ни того, ни другого, поэтому получаем ошибки. Если нет желания указывать начальное или исходное значение, то необходимо объявить свойства как опционалы, но это совсем другая история, то есть туториал.

Теперь добавьте следующий блок в фигурные скобки:

Тут мы создали инициализатор для класса, который принимает два параметра. Инициализатор всегда называется ключевым словом init в Swift. Вы можете создать несколько инициализаторов, если вам так угодно, вот только они должны принимать разные параметры.

Смотрите, мы дали параметрам этого метода такие же имена как и свойствам класса. И, чтобы их не путать, мы поставили ключевое слово self .

Теперь, у нас нет никакого конфликта имен для свойства subtotal, так что нам больше не нужно добавлять self, потому что компилятор уже автоматически выводит его, когда это нужно. Для тех, кому не все равно откуда взялось subtotal = total / ( taxPct + 1) поясним:

Теперь, добавьте следующий блок кода в фигурные скобки (после предыдущего в фигурных скобках):

Поясним, что для написания метода нам пригодится ключевое слово func. Когда мы создаем метод, мы должны указывать тип параметров явно и выходной тип метода, после результирующей стрелки -> .

Эта функция определяет размер налога, путем перемножения процента на общую сумму.

Теперь, добавляем следующий блок и снова в самый конец фигурных скобок:

Вот этот блок, когда представляет из себя новый метод, который выводит на экран три возможных варианта чаевых. Когда вы вызываете метод класса, то первый параметр необязательно должен иметь имя, но остальные должны.

Также, обратите внимание, что интерполяция строки не имеет ограничения в выводе переменных. Вы можете вписывать туда все что угодно – любые операции, которые только придут вам в голову!

Теперь, давайте добавим последний кусок кода в самый конец, после фигурных скобок:

Наконец-то, мы создали подобие калькулятора для чаевых Вот, что в итоге у нас должно было получиться в нашей «игровой площадке»:

Проверьте ваш Assistant Editor на наличие результата:

Массивы и цикл For

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

Замените содержимое printPossibleTips вот это:

Мы создали массивы с явным указанием типа и без него (просто для демонстрации). Не забывайте, что синтаксис [Double] является сокращенным вариантом Array .

Теперь, добавим эти строки ниже:

Вы можете написать альтернативный вариант вот в такой форме:

Оператор .. .

  • Тут мы создаем пустой словарь. Обратите внимание на то, что мы собираемся его изменять, а значит, мы должны объявить через ключевое слово var, но не let. Если мы объявим через let, то при попытки изменить его мы получим ошибку компиляции.
  • Здесь присваиваем значение элементу словаря по ключу.
  • Наконец, осталось изменить последнюю строку нашей игровой площадки. Собственно, именно она и исправит ошибку.

    После того как произойдут некоторые вычисления, вы увидите в инспекторе результат в виде словаря (нажмите на глаз для расширенного вида):

    Примите наши поздравления! Вы сделали свой первый калькулятор чаевых на Swift! Конечный вариант нашего playground.

    Что делать дальше? Продолжайте читать туториалы и перевод книги по Swift. Надеемся, данная статья была для вас полезной. До встречи в следующем уроке!

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Статьи c упоминанием слов: