Перейти к содержимому

План практических занятий: Язык программирования 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, Task
  • async 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-выражениями для самопроверки