Курс: Язык программирования Swift
Целевая аудитория
Студенты с поверхностными знаниями Python. Знакомы с базовыми концепциями: переменные, циклы, функции, основы ООП.
Платформа
Linux. Все примеры и инструкции ориентированы на работу в терминале Linux. Xcode и Apple-специфичные фреймворки (UIKit, SwiftUI) не используются.
Цель курса
Систематическое изучение языка Swift — от базового синтаксиса до продвинутых возможностей. Акцент на отличиях от Python, строгой типизации и уникальных концепциях Swift.
Структура курса (14 лекций)
Блок I. Основы языка (лекции 1–4)
Лекция 1. Введение в Swift и его экосистему
- История создания Swift (Apple, 2014, open-source с 2015)
- Философия языка: безопасность, скорость, выразительность
- Swift как кроссплатформенный язык: поддержка Linux, Windows, серверная разработка
- Сравнение с Python: компилируемый vs интерпретируемый, статическая vs динамическая типизация
- Установка Swift на Linux (swift.org toolchain)
- Среда разработки: терминал + VS Code (расширение Swift), Swift REPL
- Компиляция и запуск:
swiftc,swift run, REPL-режим (swift) - Первая программа:
print("Hello, World!") - Комментарии, структура программы
Лекция 2. Переменные, константы и базовые типы данных
varиlet— изменяемость и неизменяемость (сравнение с Python)- Базовые типы:
Int,Double,Float,String,Bool,Character - Вывод типов (type inference) и явная аннотация типов
- Строгая типизация и type safety — отличие от Python
- Преобразование типов (явное, отсутствие неявного приведения)
- Строковая интерполяция:
\(variable)vs f-строки Python - Кортежи (Tuples) — группировка значений
Лекция 3. Операторы и управление потоком выполнения
- Арифметические, логические, операторы сравнения
- Оператор объединения по nil:
?? - Операторы диапазона:
...и..< - Условные конструкции:
if,else,else if - Оператор
switch— мощный pattern matching (сравнение с match/case Python 3.10+) - Циклы:
for-in,while,repeat-while - Управляющие операторы:
break,continue,fallthrough guard— ранний выход
Лекция 4. Функции и замыкания
- Определение функций, параметры и возвращаемые значения
- Метки аргументов (argument labels) и имена параметров
- Параметры по умолчанию, вариативные параметры (
...) inout-параметры — передача по ссылке- Функции как тип данных первого класса (сравнение с Python)
- Замыкания (closures): синтаксис, захват значений
- Сокращённый синтаксис замыканий:
$0,$1, trailing closure - Сравнение с lambda в Python
Блок II. Коллекции и Optionals (лекции 5–6)
Лекция 5. Коллекции
Array— упорядоченный массив (аналог list в Python)Set— множество (аналог set в Python)Dictionary— словарь (аналог dict в Python)- Типизированные коллекции (отличие от Python)
- Основные операции: добавление, удаление, поиск, итерация
- Функциональные методы:
map,filter,reduce,compactMap,flatMap - Сравнение с list comprehensions и встроенными функциями Python
Лекция 6. Optionals — безопасная работа с отсутствием значений
- Концепция Optional:
Type?— значение илиnil - Зачем нужны Optionals (сравнение с
Noneв Python) - Принудительное извлечение (force unwrapping):
! - Опциональная привязка:
if let,guard let - Опциональная цепочка (optional chaining):
?. - Оператор
??(nil-coalescing) - Неявно извлечённые Optionals:
Type! - Практические паттерны безопасной работы с Optionals
Блок III. Структуры данных и ООП (лекции 7–9)
Лекция 7. Структуры и классы
structиclass— два способа определения типов- Свойства: хранимые (stored) и вычисляемые (computed)
- Наблюдатели свойств:
willSet,didSet - Методы, методы типа (
static,class) - Инициализаторы (
init) - Value types vs Reference types — ключевое отличие struct от class
- Сравнение с Python: в Python всё — reference type
- Когда использовать struct, а когда class
Лекция 8. Наследование и полиморфизм
- Наследование классов (только классы, не структуры)
- Переопределение методов и свойств:
override - Предотвращение переопределения:
final - Инициализация при наследовании: designated и convenience инициализаторы
- Приведение типов:
is,as,as?,as! - Полиморфизм в Swift vs Python
- Деинициализаторы:
deinit
Лекция 9. Перечисления (Enumerations) и Pattern Matching
- Определение enum в Swift (гораздо мощнее, чем Enum в Python)
- Raw values и associated values
- Методы и вычисляемые свойства в enum
- Рекурсивные перечисления (
indirect) - Pattern matching с
switchиcase let where-условия в pattern matching- Использование перечислений для моделирования состояний
Блок IV. Протоколы, расширения и обобщения (лекции 10–11)
Лекция 10. Протоколы и расширения
- Протоколы (Protocols) — аналог интерфейсов / абстрактных классов
- Требования к свойствам и методам
- Принятие протоколов структурами, классами, перечислениями
- Протоколо-ориентированное программирование (POP) — философия Swift
- Расширения (Extensions): добавление функциональности к существующим типам
- Расширения протоколов — реализации по умолчанию
- Сравнение с duck typing и ABC в Python
Лекция 11. Обобщения (Generics)
- Зачем нужны Generics — обобщённый код без потери типобезопасности
- Обобщённые функции и типы
- Ограничения типов (type constraints)
- Ассоциированные типы в протоколах (
associatedtype) where-условия в обобщениях- Стандартные обобщённые типы:
Array<T>,Dictionary<K, V>,Optional<T> - Сравнение с типизацией в Python (TypeVar, Generic из typing)
Блок V. Продвинутые темы (лекции 12–14)
Лекция 12. Обработка ошибок и управление памятью
- Модель обработки ошибок:
throw,throws,do-catch,try,try?,try! - Определение собственных типов ошибок через
Error - Сравнение с try/except в Python
- Автоматическое управление памятью: ARC (Automatic Reference Counting)
- Сильные, слабые (
weak) и бесхозные (unowned) ссылки - Циклические ссылки и их предотвращение
- Сравнение с garbage collection в Python
Лекция 13. Конкурентность и асинхронное программирование
- Проблемы конкурентного выполнения
async/await— структурированная конкурентность в SwiftTask,TaskGroup— управление задачами- Акторы (
actor) — безопасность данных в конкурентном коде @Sendableи изоляция данных- Сравнение с
asyncioв Python - Практические примеры: параллельная обработка данных, работа с файлами
Лекция 14. Итоговая лекция. Экосистема и практика
- Swift Package Manager (SPM) — создание пакетов, управление зависимостями (аналог pip)
- Структура проекта SPM:
Package.swift,Sources/,Tests/ - Обзор стандартной библиотеки Swift
- Foundation на Linux: что доступно, а что нет (особенности реализации)
- Серверный Swift: обзор фреймворка Vapor
- Кроссплатформенная разработка: CLI-утилиты, серверные приложения
- Код-стайл и лучшие практики
- Подведение итогов курса
- Рекомендации для дальнейшего изучения
Методические заметки
- Ориентация на Linux — все примеры запускаются в терминале Linux; используется
swiftcдля компиляции иswiftдля REPL; Apple-специфичные фреймворки не рассматриваются - Параллели с Python — каждая тема сопровождается сравнением с аналогичной конструкцией в Python, чтобы студенты могли опереться на имеющиеся знания
- Практические примеры — каждая лекция содержит примеры кода с пояснениями
- Постепенное усложнение — от простых концепций к сложным, каждая лекция опирается на предыдущие
- Акцент на безопасности типов — ключевое отличие Swift от Python, проходит красной нитью через весь курс