Основы
Язык программирования Swift создавался для осуществления следующих целей:
Безопасность
Swift разработан, чтобы быть безопасным языком. Многие недостатки C, такие как случайное взаимодействие с нулевыми указателями, встречаются намного реже. Swift очень строго типизирован, и объекты не могут быть нулевыми, кроме как при очень специфических обстоятельствах.
Современность
Swift содержит большое количество современных языковых функций, разработанных для облегчения выражения логики вашего кода. К ним относятся операторы переключения сопоставления с образцом (“Switches”), замыкания (“Closures”) и концепция всех значений, являющихся объектами, к которым можно прикрепить свойства и функции (“Extensions” – расширения).
Мощность
Swift имеет доступ ко всей среде выполнения Objective-C и легко соединяется с классами Objective-C. Это означает, что вы можете сразу использовать Swift для написания полнофункциональных приложений для iOS и OS X – вам не нужно ждать, пока кто-нибудь перенесет какие-либо функции из Objective-C в Swift. И если вы никогда не использовали Objective-C, вам даже не нужно о нем беспокоиться! Вы можете делать все, что вам нужно для разработки на платформах Apple, используя Swift.
Пример кода Swift
Этот фрагмент кода выполняет следующие действия:
- Сначала определяется функция sumNumbers. Эта функция принимает одно или несколько значений Int, которые являются целыми числами (целочисленной переменной), и возвращает одно значение Int. Int... обозначает, что функция принимает переменное число значений Int. Вы можете получить доступ к этим значениям через переменную numbers, которая является массивом.
- Внутри функции объявлена переменная total. Обратите внимание, что тип не указан – компилятор знает, что он хранит Int, потому что для него установлено целочисленное значение 0.
- Затем запускается цикл for-in, который перебирает все числа, отправленные методу. Еще раз обратите внимание, что тип числовой переменной не определен – компилятор делает вывод, что, учитывая, что числа являются массивом значений Int, число само должно быть Int.
- Значение числа добавляется к итогу.
- Когда цикл завершен, возвращается итоговое значение.
- Функция sumNumbers вызывается с набором целых чисел, а результат сохраняется в новой переменной sum. Эта переменная является константой: определяя ее с помощью ключевого слова let, мы сообщаем компилятору, что ее значение никогда не меняется. Попытка изменить значение константы является ошибкой.
- Наконец, мы отображаем значение с помощью функции печати, которая выводит значения на консоль.
Здесь также можно отметить еще несколько интересных вещей:
- Обычно вам не нужно определять тип переменных. Компилятор сделает это за вас, в зависимости от того, какие значения вы используете;
- Даже несмотря на то, что функция sumNumbers принимает переменное количество параметров, странного синтаксиса для этого случая не существует (если вы программист на C или C++, вы, возможно, помните, что не раз имели дело с va_start и его друзьями);
- Переменные, которые объявлены с ключевым словом let, являются константами. Язык спроектирован так, что любые переменные, которые могут быть константами, должны быть ею, чтобы предотвратить случайные изменения позже. Важно отметить, что константы в Swift не должны быть известны во время компиляции. Вместо этого вы можете рассматривать их как переменные, которые устанавливаются только один раз.
Xcode
Для разработки приложений для любой платформы Apple вам придется использовать Xcode, интегрированную среду разработки этой компании. Xcode объединяет в одном пакете редактор исходного кода, отладчик, компилятор, профилировщик, симулятор iOS, симулятор Apple Watch и многое другое. Именно здесь вы будете проводить большую часть своего времени при разработке приложений.
Вы можете получить Xcode в Mac App Store. Просто откройте приложение App Store и выполните поиск «Xcode». Его загрузка абсолютно бесплатна, хотя и займет какое-то время (утилита занимает более 2 гигабайт).
Создать новый проект можно нажав по кнопке «Создать новый проект XCode» или перейдя по пути File → New → Project.
Вас спросят, какое приложение вы хотите создать. Селектор шаблонов разделен на две области. С левой стороны вы найдете коллекцию категорий приложений. Вы можете создать приложение для iOS, watchOS или OS X из шаблонов проектов, которые будут настраивать каталог проекта для начала работы.
Интерактивная среда
Самый простой способ освоить Swift – это воспользоваться интерактивными средами. Интерактивные среды – это среды, в которых вы можете написать код Swift и мгновенно увидеть его результаты. Вам не нужно создавать и запускать свой код, чтобы увидеть результаты, и код не обязательно должен быть частью более крупного приложения. Это означает, что если вы хотите побаловаться с кодом, функцией или даже с частью более крупного приложения, вам не нужно делать его частью всего приложения.
Важно: вы должны привыкнуть работать в такой среде, если хотите добиться настоящих результатов! Интерактивные среды действительно полезны, и мы настоятельно рекомендуем использовать их при экспериментировании и изучении Swift.
Очень полезно иметь быстрый доступ к интерактивной среде, когда вы учитесь и в конечном итоге работаете со Swift. Мы рекомендуем перетащить файл из интерактивной среды в док-станцию OS X. Таким образом, вы можете использовать его для быстрого и простого тестирования кода Swift.
Чтобы начать использовать интерактивную среду, ее нужно создать на экране «Welcome to Xcode», который появляется при запуске этого программного обеспечения.
Вы также можете выбрать File → New → New Playground и создать новую среду оттуда. В этой статье мы будем работать с интерактивными средами для iOS. Разница между средами для iOS и OS X заключается в том, что они просто имеют доступ к разным библиотекам.
Когда вы создадите интерактивную среду, то увидите нечто похожее на следующий рисунок. В левой части окна вы можете вводить код Swift. В правой части окна вы увидите результат каждой строки кода, которую вы пишете.
Поток управления
В каждой написанной вами программе вы обязательно захотите контролировать процесс и время выполнения кода. Для этого мы будем использовать операторы if, циклы и так далее. Синтаксис потока управления в Swift очень прост и включает в себя некоторые удобные дополнительные функции.
Операторы if в Swift почти такие же, как и в любом другом языке, хотя в Swift нет необходимости заключать выражение, которое вы проверяете, в скобки:
В Swift тело всех операторов if, равно как и всех циклов, должно быть заключено в две скобки ({ и }). В C, C++, Java и Objective-C вы можете опустить эти фигурные скобки, если вы просто хотите, чтобы в вашем цикле был лишь один оператор или оператор if, например:
Циклы
Когда у вас есть коллекция элементов, например, массивов, вы можете использовать цикл for-in для итерации по каждому элементу:
Переменная числа, используемая в цикле for-in, создается неявно. Вам не нужно определять переменную с именем number, чтобы она работала.
Вы также можете использовать цикл for-in для итерации по диапазону значений. Например:
Обратите внимание на оператор ..< во второй строке. Это оператор диапазона, который Swift использует для описания диапазона чисел от одного значения до другого. На самом деле есть два оператора диапазона: две точки и левая угловая скобка (..<) или три точки без угловой скобки (...). Называемый оператором полу-диапазона, <.. означает диапазон, который начинается с первого значения и достигает, но не включает последнее значение. Например, диапазон 5..<9 содержит числа 5, 6, 7 и 8. Если вы хотите создать диапазон, который включает в себя последнее число, вы вместо этого используете оператор закрытого диапазона (...). Диапазон 5...9 содержит числа 5, 6, 7, 8 и 9. Вы можете использовать оператор включающего диапазона в циклах for-in, например:
Переключатели
Переключатель – это мощный инструмент запуска кода в зависимости от значения переменной. Переключатели существуют на других языках, но в Swift они доведены до идеала.
В Swift вы можете использовать оператор switch для обработки не только целых чисел. Вы можете включить в него множество вещей, включая строковые значения:
Вы также можете включить кортежи, переменные, которые являются связками похожих данных. Такая функциональность особенно мощна, так как вы можете написать случаи, которые выполняются, когда только один из компонентов соответствует вашему условию:
Переключатели в Swift работают немного иначе, чем переключатели в C и Objective-C. В Swift выполнение раздела в выражении switch автоматически не «проваливается» в следующий раздел, что означает, что вам не нужно включать ключевое слово break в конце раздела.
Кроме того, операторы switch должны быть исчерпывающими. Это означает, что оператор switch должен охватывать все возможные значения. Если вы переключаетесь с использованием типа Bool, который может иметь значение true или false, вы должны предоставить обработчики для обоих значений. Если нет, то возникнет ошибка компилятора.
Однако иногда невозможно охватить все случаи. Например, в случае целых чисел невозможно написать регистр для всех возможных чисел. В этих случаях вы предоставляете регистр по умолчанию, который является сокращением для «всех возможных значений». Итак, подведем итоги: в Swift вы либо предоставляете регистр для всех возможных значений, либо предоставляете регистр по умолчанию.
Переменные и константы
Переменная определяется в Swift, с помощью ключевого слова let или var:
Когда вы определяете переменную с помощью var, вам разрешается изменять ее значение. Если вы определите ее с помощью let, она никогда не сможет измениться. Swift рекомендует вам использовать константы как можно чаще, потому что они безопаснее – если вы знаете, что значение никогда не изменится, она точно не вызовет ошибку без вашего ведома:
Переменные и константы могут изначально не иметь значения, но вам необходимо присвоить значение, прежде чем пытаться получить к ним доступ. Другими словами, если вы создаете переменную и не присваиваете ей значение, единственное, что вы можете с ней сделать, – это присвоить ей значение.