Swift - относительно молодой язык программирования, созданный сотрудниками компании Apple лишь в 2014 году. По сути, Свифт является переработанной и улучшенной версией языка ObjectiveC, ранее активно применявшегося для разработки программного обеспечения под операционную систему iOS.
Swift - объектно-ориентированный, компилируемый язык. В нем есть наследуемые классы и объекты. Чтобы запустить программу на Свифт, устройство должно перевести ее в машинный код с помощью компилятора.
Сферы применения языка
- Разработка нативных приложений для iOS и macOS.
Не менее 90% ПО для iPhone, iPad и iMac сейчас пишется на Swift. Приложения на этом языке быстро запускаются и стабильно работают в рамках операционных систем от Apple. - Доработка ПО, написанного на ObjectiveC.
Так как Objective С - прародитель Swift, приложения на этом языке легко переносятся на новую платформу. - Back-end для web-приложений.
Специальные фреймворки, например, Perfect и Vapor, позволяют использовать Свифт для программирования серверной части сайтов и мобильных приложений. Но такое использование языка - скорее исключение, чем правило.
Плюсы и минусы Swift
- Высокая производительность.
По скорости обработки данных Swift в несколько раз обходит не только ObjectiveС и Python, но некоторых случаях и C++. Функциональность кода при этом не страдает. В Свифт есть все необходимые для ОПП элементы - кортежи, дженерики, шаблоны ФП и пр. - Понятный синтаксис.
Swift - высокоуровневый язык. Команды в нем ближе к простой человеческой речи, чем к машинному коду. Даже сложный код в Свифт выглядит структурировано и компактно. За счет этого язык легко понимают как опытные программисты, так и новички. - Безопасность кода.
Разработчики Swift свели возможность возникновения критических ошибок в коде к минимуму. Среда разработки предполагает автоматизацию поиска и исправления фатальных багов. Утечка данных предотвращается за счет особого подхода к обработке частей памяти. - Открытость.
Swift - платформа с открытым кодом. Разработчики и студенты могут использовать ее бесплатно по лицензии. Такой подход помогает быстро и эффективно развивать продукт. Пользователи сами делают язык таким, каким хотят его видеть - разрабатывают фреймворки, находят и устраняют уязвимости, адаптируют код для разных операционных систем. Так что можно смело утверждать, что для Apple изменение ее общей политики закрытости стало удачным решением. - Удобная рабочая среда.
Xcode - это единая среда для создания приложений под iOS и macOS. Она включает в себя необходимые компиляторы, официальную документацию от Apple, инструмент для создания интерфейсов и даже “песочницу” для обучения языку. - Динамические библиотеки.
Готовые приложения на Swift можно редактировать и улучшать в любой момент за счет динамического, адаптируемого формата библиотек. Релиза новой версии операционной системы ждать не обязательно. - Автоматизированная работа с памятью.
Система сама заботится о распределении и очистке памяти, без участия программиста.
Назвав положительные стороны Swift, упомянем и его недостатки.
- Ограниченность применения.
Использование Swift за пределами “яблочных” устройств все еще считается чем-то экзотичным. По сути, этот язык замкнут в экосистеме Apple. - Недостаток библиотек.
Свифт - относительно новая среда разработки. За 8 лет он просто не успел обзавестись таким количеством библиотек и фреймворков, как “старые” языки. Но постепенно проблема решается, и библиотек становится больше. - Плохая совместимость со старыми версиями.
При выходе глобальных обновлений разработчикам на Swift приходится значительно дорабатывать код программ, чтобы они продолжали корректно работать. К тому же старые, “досфивтовые” версии iOS и MacOS совсем не поддерживают язык. - Небольшое комьюнити разработчиков.
Этот минус также связан с возрастом языка, и также постепенно решается. Но сейчас новичкам, особенно в ру-сегменте, бывает сложно найти наставников и получить дельный совет. Остается только изучать официальные гайды от Apple, которых, к счастью, достаточно много.
Основные понятия
Рассмотрим кратко главные составляющие языка.
Переменные и константы
В Swift есть два способа задать значение для переменной.
- Var - для непостоянных переменных, значение которых может измениться в будущем. Если мы напишем var a: int = 5, далее в коде мы можем написать var a: int = 10, и это не вызовет вопросов у компилятора.
- Let - для констант. После записи let a: int = 5 значение переменной a изменить нельзя. При попытке это сделать (let a: int = 10), компилятор выдаст ошибку.
Типы данных
Свифт поддерживает следующие стандартные типы данных:
- int - целые числа;
- float, double - дробные числа;
- string - строки;
- array - массивы чисел;
- dictionary - словари, то есть списки из слов и определений;
- set - массивы из слов.
Есть в Swift и свои, особые типы данных.
- Any - массив, объединяющий числовые и строчные данные. Например let arr1 = [1, 2, 3, “один”, “два”, “три”].
- AnyObject - коллекция из различных классов и структур.
Наличие особых типов, по сути, нарушающих строготипизированность языка, вызвано преемственностью Swift от Objective C, где есть аналогичный смешанный тип id.
Классы и структуры
Класс - одно из ключевых понятий в объектно-ориентированном программировании. По сути, класс служит для описания однородных объектов, имеющих сходные характеристики.
Допустим, мы хотим создать класс “Прямоугольник”, определяющий конкретную геометрическую фигуру и способ нахождения ее площади.
class Rectangle { var height: Int = 0 var length: Int = 0 func Recsquare(_ height: Int, _ length: Int) -> Int { let recsquare = height*length return recsquare } } var rectangle = Rectangle() rectangle.height = 3 rectangle.length = 6 print ("Высота прямоугольника: \(rectangle.height)\nДлинна прямоугольника: \(rectangle.length)\nПлощадь прямоугольника: \(rectangle.Recsquare(3,6)) " )
Здесь мы выводим на экран заданные параметры высоты и длинны, и рассчитанный через функцию параметр площади фигуры.
Структура задается похожим образом.
struct Rectangle { } var height: Int = 0 var length: Int = 0 func Recsquare(_ hight: Int, _ length: Int) -> Int { let recsquare = height*length return recsquare }
Главное отличие классов и структур - в наследовании. Классы передаются по ссылке вместе со значениями. Если мы приравняем один объект класса к другому - например, rectangle2 = rectangle1 - и присвоим объекту rectangle2 любое значение длины, он все равно сохранит значение длины объекта rectangle1.
Объекты в структурах не наследуют значения.
Опциональные типы
Такой подтип данных используется, если нам нужна переменная, в которой может не быть никакого значения.
На практике подобная ситуация возможна, например, при переводе строчных данных в числовые. У нас может быть переменная let thatString = "123". При попытке присвоить ее значение числовой переменной let thatNumber = Int(thatString) ошибки не произойдет, так как изначально в thatString содержалось число. Но там могло быть и слово. В таком случае программа обрушится. Исправить ошибку можно использовав опциональную переменную Int?. При отсутствии реального значения ей будет присвоено нулевое значение nil. До специальной проверки никакие операции с опциональной переменной совершать будет нельзя.
Такой подход повышает устойчивость программы и снижает вероятность ошибок.
Синтаксис опциональных переменных очень прост.
varSample: Int? = 10
Проверка опционала происходит следующим образом.
var strSample: String? strSample = "Test" if strSample != nil { print(strSample!) } else { print("strSample не имеет значения") }
Выражение != означает “не равно”. Через него мы проверяем, не записано ли в strSample значение “nil”. Знак восклицания после имени переменной strSample! возвращает ей ее действительное значение, если оно имеется.
Другие особенности Swift
- Отсутствие точки с запятой.
Как было видно в примере, синтаксис в Свифт заметно упрощен. Программисту не нужно следить за тем, как бы не упустить разделительный знак в конце строки. - Дженерики.
Это универсальные гибкие функции, исполнение которых не зависит от типа используемых переменных. Они делают код компактным и быстро исполняемым. - Кортежи.
Тип переменных, описывающий свойства одного объекта - конкретного пользователя, компании или, например, книги. Кортежи можно использовать в функциях, что довольно удобно.
Заключение
Swift - простой и практичный язык, предназначенный для написания программного обеспечения под устройства Apple. Он базируется на принципах объектно-ориентированного программирования и включает в себя классы, структуры и объекты для управления данными. Главные положительные стороны языка - быстрая обработка информации и повышенный уровень безопасности кода.
На Свифт можно создать любое приложение - от небольшой игры до крупного корпоративного портала.