+7 (499) 288-06-73

Скопировать

Язык программирования Swift

21.11.2022
#

Swift - относительно молодой язык программирования, созданный сотрудниками компании Apple лишь в 2014 году. По сути, Свифт является переработанной и улучшенной версией языка ObjectiveC, ранее активно применявшегося для разработки программного обеспечения под операционную систему iOS.

Swift - объектно-ориентированный, компилируемый язык. В нем есть наследуемые классы и объекты. Чтобы запустить программу на Свифт, устройство должно перевести ее в машинный код с помощью компилятора.

Сферы применения языка

  1. Разработка нативных приложений для iOS и macOS.
    Не менее 90% ПО для iPhone, iPad и iMac сейчас пишется на Swift. Приложения на этом языке быстро запускаются и стабильно работают в рамках операционных систем от Apple.
  2. Доработка ПО, написанного на ObjectiveC.
    Так как Objective С - прародитель Swift, приложения на этом языке легко переносятся на новую платформу.
  3. Back-end для web-приложений.
    Специальные фреймворки, например, Perfect и Vapor, позволяют использовать Свифт для программирования серверной части сайтов и мобильных приложений. Но такое использование языка - скорее исключение, чем правило.

Плюсы и минусы Swift

#
  1. Высокая производительность.
    По скорости обработки данных Swift в несколько раз обходит не только ObjectiveС и Python, но некоторых случаях и C++. Функциональность кода при этом не страдает. В Свифт есть все необходимые для ОПП элементы - кортежи, дженерики, шаблоны ФП и пр.
  2. Понятный синтаксис.
    Swift - высокоуровневый язык. Команды в нем ближе к простой человеческой речи, чем к машинному коду. Даже сложный код в Свифт выглядит структурировано и компактно. За счет этого язык легко понимают как опытные программисты, так и новички.
  3. Безопасность кода.
    Разработчики Swift свели возможность возникновения критических ошибок в коде к минимуму. Среда разработки предполагает автоматизацию поиска и исправления фатальных багов. Утечка данных предотвращается за счет особого подхода к обработке частей памяти.
  4. Открытость.
    Swift - платформа с открытым кодом. Разработчики и студенты могут использовать ее бесплатно по лицензии. Такой подход помогает быстро и эффективно развивать продукт. Пользователи сами делают язык таким, каким хотят его видеть - разрабатывают фреймворки, находят и устраняют уязвимости, адаптируют код для разных операционных систем. Так что можно смело утверждать, что для Apple изменение ее общей политики закрытости стало удачным решением.
  5. Удобная рабочая среда.
    Xcode - это единая среда для создания приложений под iOS и macOS. Она включает в себя необходимые компиляторы, официальную документацию от Apple, инструмент для создания интерфейсов и даже “песочницу” для обучения языку.
  6. Динамические библиотеки.
    Готовые приложения на Swift можно редактировать и улучшать в любой момент за счет динамического, адаптируемого формата библиотек. Релиза новой версии операционной системы ждать не обязательно.
  7. Автоматизированная работа с памятью.
    Система сама заботится о распределении и очистке памяти, без участия программиста.

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

  1. Ограниченность применения.
    Использование Swift за пределами “яблочных” устройств все еще считается чем-то экзотичным. По сути, этот язык замкнут в экосистеме Apple.
  2. Недостаток библиотек.
    Свифт - относительно новая среда разработки. За 8 лет он просто не успел обзавестись таким количеством библиотек и фреймворков, как “старые” языки. Но постепенно проблема решается, и библиотек становится больше.
  3. Плохая совместимость со старыми версиями.
    При выходе глобальных обновлений разработчикам на Swift приходится значительно дорабатывать код программ, чтобы они продолжали корректно работать. К тому же старые, “досфивтовые” версии iOS и MacOS совсем не поддерживают язык.
  4. Небольшое комьюнити разработчиков.
    Этот минус также связан с возрастом языка, и также постепенно решается. Но сейчас новичкам, особенно в ру-сегменте, бывает сложно найти наставников и получить дельный совет. Остается только изучать официальные гайды от Apple, которых, к счастью, достаточно много.

Основные понятия

#

Рассмотрим кратко главные составляющие языка.

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

В Swift есть два способа задать значение для переменной.

  1. Var - для непостоянных переменных, значение которых может измениться в будущем. Если мы напишем var a: int = 5, далее в коде мы можем написать var a: int = 10, и это не вызовет вопросов у компилятора.
  2. Let - для констант. После записи let a: int = 5 значение переменной a изменить нельзя. При попытке это сделать (let a: int = 10), компилятор выдаст ошибку.

Типы данных

Свифт поддерживает следующие стандартные типы данных:

  • int - целые числа;
  • float, double - дробные числа;
  • string - строки;
  • array - массивы чисел;
  • dictionary - словари, то есть списки из слов и определений;
  • set - массивы из слов.

Есть в Swift и свои, особые типы данных.

  1. Any - массив, объединяющий числовые и строчные данные. Например let arr1 = [1, 2, 3, “один”, “два”, “три”].
  2. 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

  1. Отсутствие точки с запятой.
    Как было видно в примере, синтаксис в Свифт заметно упрощен. Программисту не нужно следить за тем, как бы не упустить разделительный знак в конце строки.
  2. Дженерики.
    Это универсальные гибкие функции, исполнение которых не зависит от типа используемых переменных. Они делают код компактным и быстро исполняемым.
  3. Кортежи.
    Тип переменных, описывающий свойства одного объекта - конкретного пользователя, компании или, например, книги. Кортежи можно использовать в функциях, что довольно удобно.

Заключение

Swift - простой и практичный язык, предназначенный для написания программного обеспечения под устройства Apple. Он базируется на принципах объектно-ориентированного программирования и включает в себя классы, структуры и объекты для управления данными. Главные положительные стороны языка - быстрая обработка информации и повышенный уровень безопасности кода.

На Свифт можно создать любое приложение - от небольшой игры до крупного корпоративного портала.