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

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

Порхает как ласточка, типизирует как TypeScript

Swift — это современный язык программирования, который создала компания Apple. На нём пишут приложения для macOS, iOS, серверов и других платформ. А ещё с его помощью можно написать софт для умного дома или микроконтроллеров. Рассказываем, что ещё умеет Swift, в чём его особенности и как его выучить.

История языка Swift

Раньше в экосистеме Apple всё писали на языке Objective-C. Он использовался с 80-х годов, но к 2010-му уже устарел. В нём не хватало важных современных возможностей, например замыканий и дженериков — сущностей, которые не зависят от конкретных типов данных.

К тому же Objective-C был сложным для понимания, особенно для новичков, и не всегда безопасным (например, можно было случайно обратиться к памяти, где данных уже нет). Ну и ещё со временем он стал откровенно старым — это был язык, созданный для другой эпохи.

Apple решила, что пора придумать что-то новое: более производительное, удобное и безопасное. И в 2010 году началась разработка Swift под руководством Криса Латтнера и его команды, куда входили Дуг Грегор, Джон МакКолл, Тед Кременек и Джо Грофф. Вдохновение они черпали из множества языков: Objective-C, Rust, Haskell, Ruby, Python, C# и даже из менее известных языков вроде CLU.

Для работы с языком Apple активно развивала среду разработки Xcode. Изначально Xcode была разработана для работы с Objective-C и впервые вышла в 2003 году. Xcode стала основным инструментом для программирования в экосистеме Apple. Она включала редактор кода, средства для дизайна интерфейсов, симуляторы устройств и инструменты отладки.

Язык программирования Swift
Создание простого GUI-приложения на Objective-C в Xcode. Источник: macrumors.com

В 2014 году вышла первая версия — Swift 1.0, а уже через год, на конференции WWDC 2015, Apple представила значительно улучшенный Swift 2.0. В 2015 году Swift стал проектом с открытым исходным кодом под лицензией Apache 2.0. То есть теперь не только Apple, но и разработчики со всего мира могут участвовать в его развитии. На тот момент язык поддерживал платформы Apple и Linux.

Например, так на Objective-C выглядит Hello, world!:

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hello, world!");
    }
    return 0;
}

А вот так на Swift:

print("Hello, world!")

В Objective-C нужно вручную создавать пул для управления памятью с помощью @autoreleasepool. В Swift же всё управляется автоматически и код намного лаконичнее.

В 2016 году вышел Swift 3.0, где было много изменений, в том числе переработка синтаксиса. Эти изменения сделали Swift более удобным и читаемым, но разработчикам пришлось потратить время на адаптацию к новому стилю. К началу 2018 года Swift стал популярнее Objective-C. Всё больше приложений для iOS и macOS начали разрабатываться именно на Swift.

В Swift 4.0 добавили функцию миграции кода в Xcode. Теперь можно было легко обновить проекты, написанные на более старых версиях языка. В пятой версии добавили поддержку ABI (Application Binary Interface) для iOS. Это означало, что разработчики могли создавать более компактные приложения, так как стандартные библиотеки Swift теперь были встроены в операционную систему.

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

Современный интерфейс Xcode с проектом SwiftUI: структура проекта, код и предварительный просмотр интерфейса приложения

Ну и наконец, в 2024 году вышла шестая версия языка. Среди главных изменений — улучшенная защита данных и появление нового инструмента под названием Embedded Swift, который позволяет использовать язык в устройствах с ограниченными ресурсами, например в умных гаджетах.

Где и для чего используется Swift

В первую очередь Swift используется для разработки приложений в экосистеме Apple: iOS, macOS, watchOS и tvOS. Многие известные приложения либо переписаны, либо написаны на Swift — LinkedIn, Airbnb, Slack. Например, iOS-приложение для вызова такси Lyft полностью переписали на Swift. Если раньше код занимал около 75 000 строк, то на Swift ту же функциональность удалось уместить менее чем в трети исходного объёма.

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

Язык программирования Swift
Swift используют в STM32F746, Raspberry Pi Pico, nRF52840 и ESP32C6

На Swift пишут игры и приложения с дополненной реальностью, используя библиотеки SpriteKit, SceneKit и ARKit. Приложение IKEA Place, которое позволяет расставлять мебель в доме, сделано с помощью ARKit.

Кроме того, на Swift можно писать серверную часть для приложений с помощью фреймворков Vapor или Kiturami и даже использовать их для машинного обучения. С Vapor можно развернуть сервер, который обрабатывает большие модели машинного обучения и отправляет результаты клиенту.

Язык программирования Swift
Пример интерфейса iOS-приложения для классификации изображений. Источник: createwithswift.com

Как это работает? Сервер принимает данные, передаёт их в модель машинного обучения, обработанную с помощью Core ML, а затем возвращает результат клиенту в виде JSON. Такой подход снижает нагрузку на память устройств, позволяет использовать более сложные модели и упрощает обновление системы. 

Основные характеристики языка Swift

Swift — выразительный и универсальный язык. Его создавали с расчётом на простоту, безопасность и высокую производительность. Он подходит для самых разных задач — от разработки мобильных приложений до серверной части и встраиваемых систем. А если вы освоите Swift для iOS, то в будущем сможете легко переключиться на другие области программирования, не изучая новый язык с нуля.На ноябрь 2024 года Swift занимает 15-е место в рейтинге языков TIOBE.

Язык программирования Swift
Популярность языка с 2015-го по 2024-й. Источник: TIOBE

В Swift понятный синтаксис. Если вы уже знакомы с Python или JavaScript, то сразу заметите сходство: простота и читаемость на первом месте. Другая важная особенность — строгая типизация. Это значит, что тип данных переменной или константы остаётся неизменным после её объявления. Например, если мы напишем

var age: Int = 25
age = "двадцать пять" // Ошибка

то компилятор сразу выдаст ошибку, поскольку age не может быть строкой:

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

Это предотвращает ошибки на ранних этапах разработки и делает язык безопасным.

Кроме удобства и безопасности, Swift ещё и быстрый. Он переводит код в машинный язык, понятный процессору, используя инструмент LLVM. Во время компиляции приложение преобразуется в набор инструкций, которые компьютер может выполнять напрямую. При запуске эти инструкции вместе с нужными библиотеками загружаются в статическую память — область, которая выделяется ещё до отображения приложения на экране и остаётся доступной на протяжении всей его работы. Из этой памяти приложение получает все ресурсы для выполнения задач. Благодаря этому приложения на Swift работают быстро и стабильно, как программы на C++ и Rust.

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

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

Преимущества и недостатки языка Swift

Swift — безопасный и производительный язык, который делает разработку проще и удобнее. Но у него есть свои особенности, которые стоит учитывать.

✅ Преимущества

  • Высокая производительность. Код на Swift компилируется в машинный язык, поэтому приложения работают быстро и эффективно, будь то игра, сложные вычисления или серверная часть.
  • Удобочитаемость. Синтаксис Swift понятен, учиться ему проще.
  • Безопасность. Строгая типизация и защита от ошибок помогают избегать проблем в приложениях. Это особенно важно для крупных проектов.
  • Playground. Интерактивная среда Swift Playground позволяет тестировать код и сразу видеть результат. 
  • Универсальность. Swift подходит для мобильных приложений, серверной разработки, а также для встроенных систем.

❌ Недостатки

  • Сложности с миграцией. Если приложение изначально написано на Objective-C, перевести его на Swift может быть непросто. Комбинированные проекты требуют дополнительного времени и усилий.
  • Молодость языка. Swift всё ещё активно развивается. Иногда это приводит к изменениям в синтаксисе или поведении. 
  • Ограничения инструментов. Swift отлично работает с Xcode, но использование сторонних IDE или инструментов может быть проблематичным.

Ограничения платформ. Swift не поддерживает старые версии iOS, что может быть проблемой, если приложение должно работать на устаревших устройствах.

Примеры кода на языке Swift

Чтобы начать писать код на Swift, понадобится компьютер Mac и инструменты для разработки — в первую очередь Xcode, который содержит редактор кода, симуляторы устройств и компилятор для Swift. Xcode доступен бесплатно в Mac App Store.

Также на macOS можно писать код на Swift прямо в терминале. Для этого нужно ввести команду swift:

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

Откроется интерактивный режим (REPL), где можно писать и выполнять код. 

В Swift есть разные типы данных: Int для целых чисел, Double и Float для чисел с плавающей точкой, String для текста, Bool для логических значений, Array (массивы), Dictionary (словари) для хранения коллекций данных и другие. Также Swift поддерживает дженерики — универсальные шаблоны, которые позволяют реализовывать гибкие конструкции без привязки к конкретным типам данных. 

Указывать тип данных (аннотировать) нужно, когда компилятор не может сам определить его однозначно, или когда требуется высокая точность. Например, дробное число по умолчанию интерпретируется как Double, но если нужен Float, то указываем тип явно:

let myNumber: Float = 3.14

Создадим массив и посчитаем сумму его элементов:

// создаём массив чисел
let numbers = [1, 2, 3, 4, 5]
// используем метод reduce для вычисления суммы элементов
let sum = numbers.reduce(0, +)
// выводим результат
print("Сумма чисел: \(sum)")
Язык программирования Swift

В этом коде мы создали массив чисел, но не указали его тип, поскольку в Swift есть выведение типов. В нашем случае мы присваиваем числовое значение константе, и компилятор сам понимает, что numbers — это массив целых чисел [Int], поскольку все элементы массива — это целые числа. Если мы попытаемся добавить в этот массив строку, то из-за строгой типизации языка получим ошибку:

numbers.append("текст")
Язык программирования Swift

Компилятор ругается, что метод append ожидает значение типа Int, а мы пытаемся передать строку. 

Другая интересная штука в Swift — опционал. Это специальный тип данных, который может содержать либо значение, либо быть пустым (nil). Обычно переменные и константы в Swift всегда должны иметь значение, но бывают ситуации, когда значение может быть неизвестным.

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

Тогда мы добавляем опционал и явно говорим программе: «Эта переменная может быть пустой». Если пользователь не указал место работы, то тогда вместо проверок данных мы получим ответ, что значения просто нет. У переменной есть два состояния: либо она хранит значение, либо явно даёт понять, что его нет (nil):

struct User {
    var name: String
    var age: Int
    var workplace: String? // Опционал: место работы может быть пустым
}

В этом коде мы создали структуру — объект struct — и задали ему три свойства: name, age, workplace. Поскольку третье свойство необязательно, мы сделали его опциональным, указав, что эта строка может содержать название места работы или быть пустой. Если пользователь ничего не введёт, то программа не сломается.

А вот код простой игры для терминала «Орёл или решка». Компьютер «подбрасывает монетку», а пользователь отгадывает, что выпало:

// Импортируем библиотеку Foundation для стандартных функций
import Foundation
// Генерируем случайный результат — орла или решку
let coinFlip = Bool.random() // true — орёл, false — решка
// Устанавливаем флаг для состояния игры
// Пока пользователь не угадал, игра продолжается
var isCorrect = false 
// Выводим приветствие и правила
print("Сыграем в 'Орёл или решка'!")
print("Я подбросил монетку. Попробуй угадать: орёл или решка?")
// Начинаем игровой цикл
while !isCorrect {
   // Запрашиваем у пользователя его предположение
   print("Введи свой ответ (орёл/решка):")
   // Читаем ввод пользователя
   if let input = readLine()?.lowercased() { // Приводим ввод к нижнему регистру
       // Проверяем, что пользователь ввёл корректный вариант
       if input == "орёл" || input == "решка" {
           // Сравниваем ввод пользователя с результатом
           if (input == "орёл" && coinFlip) || (input == "решка" && !coinFlip) {
               // Если угадал, поздравляем и завершаем игру
               print("Поздравляю! Это правильный ответ!")
               isCorrect = true // Устанавливаем флаг в true, чтобы выйти из цикла
           } else {
               // Если не угадал, выводим сообщение и просим попробовать ещё раз
               print("Неверно! Попробуй снова.")
           }
       } else {
           // Если ввод не "орёл" или "решка", выводим сообщение об ошибке
           print("Пожалуйста, введи только 'орёл' или 'решка'.")
       }
   } else {
       // Если ввод пустой или некорректный, просим повторить попытку
       print("Пожалуйста, введи ответ.")
   }
}

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

swift имя_файла.swift
Язык программирования Swift

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

Сложности и особенности изучения языка Swift

Несмотря на простой и лаконичный синтаксис, кое-что в Swift может показаться сложным. Swift — это многопарадигмальный язык программирования, который включает в себя идеи из Haskell, Scala и F#. Это значит, что он поддерживает разные стили программирования: императивное, объектно-ориентированное, функциональное, протокол-ориентированное. Можно выбрать разные подходы под разные задачи: для работы с данными лучше подойдёт функциональный стиль, а для описания сложной иерархии — ООП.

Для полноценного владения Swift недостаточно знать только язык — придётся разбираться и с библиотеками Apple, без которых приложения не сделать. А без понимания принципов ООП не получится освоить системные библиотеки или читать документацию Apple.

Ограничения накладывает и сама мобильная разработка. Устройства Apple — это системы с ограниченной памятью и вычислительными ресурсами. Нужно писать не просто рабочий, но и эффективный код, экономящий память.Поэтому изучение Swift лучше начать с простого: научиться добавлять элементы интерфейса (кнопки или текстовые поля) в Xcode и связывать их с кодом через атрибуты IBOutlet и IBAction:

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

Затем, если захотите сделать что-то посложнее, например обновлять экран после получения данных с сервера, придётся разобраться с очередями и асинхронным программированием, чтобы правильно управлять процессами.

С чего начать обучение языку Swift

Если знаете английский — начните с официальной страницы языка.

Почитайте нашу статью про основные конструкции Swift. Там мы рассказали про переменные, условные операторы, циклы, функции, классы и другие штуки, чтобы вы могли написать свой первый код.А если хочется углубиться в язык и делать реальные приложения, то приходите на курс Практикума «iOS‑разработчик». Там изучите Swift, его фреймворки и другие инструменты, а также сделаете 4 больших полноценных приложения. На курсе есть бесплатная часть: можно в своём темпе познакомиться с языком Swift, дописать и запустить своё первое приложение в Xcode — игру Pong.

Обложка:

Алексей Сухов

Корректор:

Елена Грицун

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy