Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Как создать приложение для iOS

Playground

Playground, или в переводе на русский «песочница», представляет из себя отличное окружение для того, чтобы изучить Swift. Выглядит это так: вы вводите строку кода и моментально видите результат его выполнения. После того, как вы убедитесь, что написанный вами код дает нужный результат, вы можете просто взять и перенести его в свой проект.

Например, при помощи Playground вы можете решить следующие задачи:

· освоить синтаксис Swift

· поэкспериментировать с новыми API, чтобы улучшить навыки программирования

· разработать новый алгоритм и понаблюдать за каждым шагом его выполнения

· провести простые арифметические вычисления

1. Как говорится «лучше один раз увидеть, чем 100 раз услышать», поэтому давайте посмотрим на Playground сами. Чтобы это сделать нам потребуется запустить Xcode.

2. После запуска Xcode вы увидите окошко с предложением создать новый проект или запустить Playground. Собственно нам нужен Playground, поэтому смело выбирайте пункт «Get started with a playground».

3. Теперь вам нужно придумать имя для своего Playground, нажать кнопку Next и сохранить его куда-нибудь. Рекомендую сохранить Playground на рабочий стол или перетащить потом в Dock, чтобы его всегда можно было быстро запустить.

4. После того, как вы нажмете кнопку «Save», вы увидите тот самый Playground.

5. Возможно, вы расстроились, что тут нет ничего интересного. Давайте это исправим, заменив текст в Playground на следующий:

var j = 2
for var i = 0; i < 5; ++i {
j += j * i
}

j

println("result: (j)")

 

6. В результате Playground будет выглядеть так:

Правый столбец называется панелью результатов (results sidebar) и для каждой строки в нем показано значение, которое будет получено в результате ее выполнения. Например, для строки 2 с арифметическим выражением в столбце результата будет значение этого выражения.

7. Обратите внимание на строку 6, в ней панель результатов содержит не результат выражения, а то, сколько раз это выражение было посчитано (5 раз). Мы можем увидеть, какие значения были получены для этой строки. Чтобы это сделать, надо нажать на маленький плюсик рядом с текстом (5 times). После чего Playground станет выглядеть так:

8. Теперь в правой части Playground отображается панель Timeline. Еще ее можно открыть, выбрав в меню пункт View->Assistant Editor->Show Assistant Editor.

9. Timeline позволяет увидеть, как менялось значение выбранного выражение во времени. Чтобы это сделать, используйте слайдер внизу. Попробуйте поперетаскивать его.

10. Кроме того, в Timeline показывается «Console Output». Это тот текст, который бы вывела ваша программа в консоль устройства или терминал.

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

Комментарии

11. Комментариями называются строки, которые игнорируются при выполнение программы и в которых разработчики оставляют какой-то объясняющий текст.
Комментарий может быть однострочным (текст комментария идет после //) и многострочным (текст комментария заключен в /* */).

Переменные

12. Переменной называют какое-либо значение, ассоциированное с символическим именем (идентификатором). И таким образом, когда говорят «переменная X хранит значение 3», имеют в виду, что значение 3 ассоцировано с символическим именем X.

Значения, хранящиеся в переменных, могут быть различных типов: строка, целое число, число с плавающей точкой, …

Еще есть такое понятие как тип переменной. Тип переменной определяет типы значений, которые она может хранить. Т.е строковая переменная может хранить только строки и не может хранить числа и т.д.

13. В Swift для определения переменных используются ключевые слова var и let. Разница между ними в том, что переменная, объявленная с использованием let, меняться не может.

14. Давайте объявим несколько переменных:

Как видите, присваивание значения переменной, объявленной с помощью let, приводит к ошибке. А также к ошибке приводит попытка использовать значение не подходящее для данной переменной.

15. Обратите внимание, что нигде явно не фигурирует тип переменной. Он определяется не явно из присваемого значения. Тем не менее, его можно задать явно после имени переменной.

16. Обратите внимание еще на один момент. Переменная, объявленная при помощи let, всегда должна быть инициализирована при объявлении, в то время как переменная, объявленная при помощи var, должна быть инициализирована только перед использованием.

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

String

17. Строка, для создания значения используются кавычки “”.

При создании строки вы можете использовать различные выражения на Swift, используя синтаксис «()», где какое-либо выражение. Но есть ограничение, вы не можете в нем использовать символ кавычки («). Пример:

Int

18. Целое число.

Float/Double

19. Число с плавающей точкой. Double отличается от Float тем, что может хранить значения, которые в два раза больше. Если тип не указан, то по умолчанию используется Double.

Bool

20. Булев тип. Может принимать значения true (правда) или false (ложь).

Вывод в консоль

21. Консолью было принято называть совокупность устройств, которые обеспечивают взаимодействие человека с компьютером. Например, консолью вывода можно назвать монитор, а консолью ввода клавиатуру. Сейчас термин стал абстрактным и не связанным с реальным устройством (например, данные могут выводиться не на монитор, а записываться в файл) и на разных устройств консоль реализована по–разному.

Например, на каждом iOS устройстве есть диагностическая консоль, в которую выводятся системные сообщения и сообщения от приложений. Она доступна через Xcode и выглядит так:

Таким образом, «Console Output», который показывает Timeline представляет из себя текст, который увидит пользователь в консоли.

22. Чтобы показать что-то в консоли, нужно использовать команды print и println.

Команда print отличается от команды println тем, что включает в себе символ первой строки (“n”).

 

 

23. Попробуйте выполните строки:

print("a")
print("b")
println("c")
println("d")
print("en")
print("f")

24. В результате вы увидите следующее:

25. Как вы помните, при создании строк можно использовать выражения. Таким образом конструирование выражения для вывода в консоль можно заметно упростить.

 

Функции

26. Функцией называется последовательность операций выполняющих определенную задачу. Функция может принимать значения и возвращать результат.

Для объявления функции используется ключевое слово func, после которого следует имя функции и круглые скобки. Если функция возвращает значение, то его тип должен быть указан после круглых скобок с использованием ключевого слова “->”. Если функция не возвращает значения, то тип можно не указывать или использовать тип Void, который означает «ничего» или пустое значение.

27. Значения, принимаемые функцией, указываются в круглых скобках. Объявление аргументов аналогично объявлению переменных, причем можно явно не указывать var/let. По умолчанию используется let.

Вызов функции осуществляется при помощи указания ее имени и значений для аргументов.

28. Вы можете сделать так, чтобы имя параметра обязательно указывалось при вызове функции. Для этого его надо обрамить при помощи символа #. При этом внутри функции вы можете использовать сокращенное имя, задавая его после имени с #

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

func kilocalories(#fats: Double, #proteins: Double, #carbohydrates:Double) -> Double {
return 4 * (carbohydrates + proteins) + 9 * fats
}

println("kilocalories == (kilocalories(fats: 20, proteins: 15, carbohydrates: 32))")

 

Как создать приложение для 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, мы создали калькулятор калорий. Сегодня сосредоточимся на том, как организуется код внутри приложения. Это называют его архитектурой.

Некоторые из вас уже знают, что в основе любого iOS-приложения лежит архитектурный шаблон MVC. Для тех кто не знает — вот пояснение:

M — Model (данные). Их мы в красивом виде отображаем в интерфейсе и обновляем при пользовательском вводе.

V — View (интерфейс). То, что видит пользователь. Графическое отображение тех самых данных (M). Пользователь, взаимодействуя с интерфейсом, обновляет данные.

 
 

C — Controller. Промежуточный слой между интерфейсом и данными. Обеспечивает двухстороннее взаимодействие M с V.

 

Определённые фрагменты кода отвечают за выполнение определённых задач. Так, одна функция может отвечать за набор текста в текстовом поле, а другая – за обработку введённой информации. Рассмотрим пример нашего FirstViewController. Сам контроллер должен управлять отображением информации через view и сообщать модели о действиях пользователя.

При этом код, отвечающий за расчёт калорий по формуле, является операцией исключительно над данными. Эта функциональность не лежит среди основных обязанностей контроллера. К тому же, расчёт значения по формуле может понадобиться выполнить на другом экране. Всё это ведёт к тому, что расчёт значения стоит вынести за пределы FirstViewController.

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

Цель сегодняшнего урока — заложить понятие модульной разработки и применить этот принцип в нашем калькуляторе калорий.

Если сейчас мы взглянем на наше приложение, то увидим, что вся логика сосредоточена в контроллере. В методе-обработчике нажатия кнопки происходит вычисление значений BMI/BMR. Эту часть кода явно можно вынести в отдельный программный модуль, например, класс. Давайте запустим Xcode и создадим новый класс: New File->Source->Swift File->Next

Называем его Calc (калькулятор) и жмем Create.

Вы создали новый файл. В нем после строчки import Foundation впишите следующее:

Класс создан, теперь надо добавить в него метод (например, calculateBodyMassIndexAndRate), который вычисляет BMI/BMR относительно роста, веса и т.д. Но прежде чем приступить к реализации метода, давайте немного подумаем. Тот код, что сейчас находится в обработчике нажатия кнопки сильно зависит от интерфейсных элементов. Мы не можем просто взять и перенести его внутрь Calc, поскольку внутри нового класса нет и не должно быть доступа к интерфейсу пользователя, а должны быть только операции над данными. Решить эту проблему можно, добавив в наш метод необходимые параметры:


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

Теперь у нас есть класс, в котором собраны все данные, необходимые для расчёта значения по формуле. Описание метода будет выглядеть куда проще:

Отлично, следующим шагом давайте уже перенесем код из контроллера, заменив данные интерфейсных элементов на параметры input:

 

По аналогии с CalcInputData можно создать класс CalcOutputData, в котором будут храниться вычисленные значения BMR/BMI.

Мы не будем подробно останавливаться на самом алгоритме, достаточно сказать, что он использует входные данные, определяя по ним коэффициенты для вычислений. Подробно остановимся на последних строчках. Для того чтобы вернуть из метода значение, мы пишем return <значение>. Но что делать если результатом работы являются сразу несколько значений?

Есть два пути. Первый — то, как реализовано выше, т.е. создание отдельного класса для выходных данных (CalcOutputData), а второй способ — использование так называемых кортежей (tuples). Кортежи – это упорядоченные наборы значений, их использование поддерживается языком Swift. Их можно использовать, чтобы возвращать несколько значений одной функцией. Используя кортеж, мы можем обойтись без введения нового класса и упростить:

до:

А тип возвращаемого значения изменится c -> CalcOutputData на -> (Int, Int)

Отлично! Теперь у нас есть независимая сущность “Калькулятор”, которая для остальных программных частей представляет собой классический черный ящик:

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

Обратите внимание, присвоение значений возраста, роста и веса происходит не напрямую, а с помощью условия. Метод toInt() пытается преобразовать текст в число и вернуть это значение, но если строка имела неверный формат, то возвращать ничего не нужно. Поэтому в Swift есть так называемые optional types.

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

Финальный аккорд.

Прежде чем перейти к завершающему действию, нужно ненадолго остановиться на таком теме, как конструкторы. У каждого класса помимо тех методов, которые мы пишем внутри, есть один или несколько методов, которые уже в нем присутствуют. Эти методы называются конструкторами, и они отвечают за создание экземпляров класса. Вызываются они по имени класса, то есть если класс называется Class, то вызов конструктора будет выглядеть как Class(). Конструктор всегда возвращает новый экземпляр класса. В конструктор как и в обычный метод можно передавать параметры, поэтому их может быть несколько.

Для вызова метода calculateBodyMassIndexAndRate из калькулятора, сперва нужно с помощью конструктора создать экземпляр класса, и, обратившись к нему вызвать непосредственно метод:

Обратите внимание, поскольку возвращаемое значение из метода это tuple (кортеж), то его внутренние значения доступны по индексу – 0, 1, 2 и т.д. Также хочется заострить ваше внимание на том, как формируется итоговая строка. В swift есть возможность удобного форматирования строк, без вызова дополнительных методов. Достаточно внутрь строки вставить конструкцию \(…) и внутри скобок записать требуемое выражение. В нашем случае в строку подставляются значения BMR/BMI из кортежа.

Итог

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...