План практических занятий: Язык программирования Swift
Платформа
Linux. Все задания выполняются в терминале. Xcode и Apple-специфичные фреймворки не используются.
Формат занятий
Каждая практика содержит задания трёх уровней:
- A. Разминка — базовые упражнения для закрепления синтаксиса
- B. Основные задания — задачи средней сложности, требующие комбинирования нескольких концепций
- C. Проектное задание — мини-проект, приближённый к реальной разработке
Структура практических занятий (16 занятий)
Блок I. Основы языка (практики 1–4)
Практика 1. Введение в Swift и его экосистему
К лекции 1
- Установка Swift на Linux, проверка версии
- Работа с REPL и компиляция через
swiftc/swift - Строковая интерполяция, простейший ввод-вывод
- Сравнение синтаксиса Swift и Python
Практика 2. Переменные, константы и базовые типы данных
К лекции 2
varиlet, вывод типов (type inference), явная аннотация типов- Базовые типы:
Int,Double,String,Bool,Character - Явное преобразование типов,
typealias - Кортежи (Tuples)
Практика 3. Операторы и управление потоком выполнения
К лекции 3
- Арифметические, логические операторы, nil-coalescing (
??), диапазоны - Условные конструкции:
if/else,switchс pattern matching - Циклы:
for-in,while,repeat-while,stride guard, labeled statements,break,continue
Практика 4. Функции и замыкания
К лекции 4
- Функции: метки аргументов, значения по умолчанию, вариативные параметры,
inout - Функции как объекты первого класса
- Замыкания (closures): полный и сокращённый синтаксис (
$0,$1, trailing closure) - Функциональная обработка данных:
map,filter,reduce
Блок II. Коллекции и Optionals (практики 5–6)
Практика 5. Коллекции
К лекции 5
Array,Set,Dictionary— создание, модификация, итерация- Типизированные коллекции
- Функциональные методы:
map,filter,reduce,compactMap,flatMap,sorted,contains - Сравнение с list comprehensions Python
Практика 6. Optionals — безопасная работа с отсутствием значений
К лекции 6
- Опциональные типы (
Optional),nil - Принудительное извлечение (
!),if let,guard let - Optional chaining (
?.), оператор?? compactMapдля работы с коллекциями опционалов
Блок III. Структуры данных и ООП (практики 7–9)
Практика 7. Структуры и классы
К лекции 7
structиclass: хранимые и вычисляемые свойства- Наблюдатели свойств:
willSet,didSet - Мутирующие методы (
mutating), инициализаторы, статические свойства - Value types vs Reference types — практическая демонстрация
Практика 8. Наследование и полиморфизм
К лекции 8
- Наследование классов,
override,final,super - Designated и convenience инициализаторы
- Приведение типов:
is,as?,as! - Деинициализатор
deinit
Практика 9. Перечисления и Pattern Matching
К лекции 9
- Raw values и associated values
- Методы и вычисляемые свойства в
enum - Рекурсивные перечисления (
indirect) - Pattern matching:
switch,if case,for case,where
Блок IV. Протоколы, расширения и обобщения (практики 10–12)
Практика 10. Протоколы (часть 1)
К лекции 10
- Объявление протоколов: требования к свойствам и методам
- Conformance для
struct,class,enum - Протокол как тип, композиция протоколов
- Class-only протоколы
Практика 11. Расширения и протокол-ориентированное программирование (часть 2)
К лекции 10
- Расширения (Extensions): добавление методов, вычисляемых свойств, инициализаторов
- Реализации по умолчанию через расширения протоколов
- Условное соответствие (conditional conformance)
- Стандартные протоколы:
CustomStringConvertible,Equatable,Comparable,Hashable,Codable - Философия POP (протокол-ориентированного программирования)
Практика 12. Обобщения (Generics)
К лекции 11
- Обобщённые функции и обобщённые типы
- Ограничения типов (type constraints),
where-условия - Ассоциированные типы (
associatedtype) - Opaque-типы (
some Protocol) - Обобщённые расширения
Блок V. Продвинутые темы (практики 13–16)
Практика 13. Обработка ошибок (часть 1)
К лекции 12
- Собственные типы ошибок через протокол
Error throw,throws,do-catch,try,try?,try!defer— отложенное выполнение- Тип
Resultдля обработки исключительных ситуаций
Практика 14. Управление памятью — ARC (часть 2)
К лекции 12
- Автоматический подсчёт ссылок (ARC),
deinit - Циклические ссылки и их обнаружение
weakиunownedссылки- Capture lists в замыканиях
Практика 15. Конкурентность и асинхронное программирование
К лекции 13
async/await,Taskasync letиTaskGroup— параллельное выполнение- Кооперативная отмена задач
- Акторы (
actor) — безопасность данных в конкурентном коде
Практика 16. Экосистема Swift и итоговый проект
К лекции 14
- Swift Package Manager:
swift package init,Package.swift, зависимости FoundationиCodableна Linux- Создание CLI-утилит
- Портирование Python-кода на Swift
- Знакомство с серверной разработкой (Vapor)
Методические заметки
- Привязка к лекциям: каждая практика соответствует одной лекции; лекции 10 и 12 разбиты на две практики ввиду объёма материала
- Нарастание сложности: задания в каждой практике идут от разминки (A) к проектным задачам (C)
- Параллели с Python: в заданиях регулярно предлагается сравнить решение с аналогичным на Python
- Автономность: все задания запускаются в терминале Linux через
swift <файл>.swiftили SPM - Проверка: каждое задание сопровождается
print/assert-выражениями для самопроверки