Легендарный курс Стэнфордского университета CS193p возвращается в 2025 году с обновленной программой по SwiftUI. Профессор Пол Хэгарти, обучающий разработке под iOS уже полтора десятилетия, в первой лекции закладывает фундамент: от философских отличий Swift от объектно-ориентированных языков до детального разбора того, как работает «магия» декларативного интерфейса Apple.
🎓 Обзор курса и философия обучения 0:05
Пол Хэгарти преподает этот курс практически с момента выхода первого iPhone . Основной упор сделан на разработку под iPhone и iPad, однако благодаря универсальности SwiftUI, полученные знания применимы для создания приложений под macOS, Apple Watch, tvOS и даже visionOS .
Главное отличие курса в 2025 году — акцент на современных парадигмах. Хэгарти подчеркивает, что SwiftUI — это не объектно-ориентированное программирование (ООП), к которому привыкли многие разработчики . Вместо него студенты будут изучать:
- Функциональное программирование: подход, редко встречающийся в базовых курсах (кроме Haskell).
- Протокол-ориентированное программирование: специфическая для Swift архитектура.
- Реактивные интерфейсы: концепция, схожая с React и React Native, но реализованная нативными средствами Apple .
Курс построен по «нарративному» принципу: вместо разрозненных примеров (vignettes) студенты вместе с преподавателем в течение 6–7 недель строят одно массивное приложение — игру CodeBreaker . Хэгарти считает, что только так можно понять, как компоненты взаимодействуют в реальном масштабе.
🛠 Инструментарий: Xcode и симуляторы 13:06
Xcode — основная рабочая среда, которая требует детального изучения из-за своей сложности. Хэгарти провел «спиральный тур» по интерфейсу :
- Навигатор (слева): управление файлами проекта, поиск, просмотр истории сборок и работа с активами (Assets) .
- Панель управления (вверху): выбор цели запуска. Приложения можно запускать на симуляторах различных моделей iPhone/iPad или напрямую на физическом устройстве через кабель или Wi-Fi .
- Инспектор (справа): позволяет настраивать свойства элементов UI (шрифты, цвета) визуально, при этом Xcode автоматически генерирует соответствующий код в редакторе .
- Консоль и отладчик (снизу): вывод сообщений системы и отслеживание состояния переменных при сбоях .
Особое внимание уделено Preview Canvas — инструменту «живого» просмотра. Код компилируется в реальном времени: любое изменение текста или цвета в редакторе мгновенно отображается на макете iPhone справа .
🧱 Анатомия SwiftUI: Теория «Лего» 52:29
Для объяснения того, как устроены View в SwiftUI, Пол Хэгарти использует аналогию с конструктором Lego . В этой системе всё является «кирпичиком» определенного типа:
- Базовые кирпичики (Bricks): стандартные элементы, такие как
Text,ImageилиCircle. - Собранные модели (Helicopter): ваши собственные компоненты, например
ContentView, которые состоят из базовых кирпичиков . - Мешок с деталями (Bag of Lego): контейнер, который просто держит набор элементов вместе (в коде это
TupleView) . - Инструкция (Manual): элементы, которые определяют правила расположения «кирпичиков». Например,
VStack(вертикальный стек) илиHStack(горизонтальный стек) .
💻 Погружение в синтаксис Swift 39:40
Хэгарти подробно разобрал ключевые конструкции языка Swift, используемые в шаблоне нового проекта.
Типы данных и переменные
Swift — строго типизированный язык . Переменная всегда должна иметь четко определенный тип и значение. В Swift нет концепции «ничего» (null/nil) в привычном понимании других языков; вместо этого используется специальный тип Optional .
Структуры (struct) против Классов (class)
В SwiftUI практически всё строится на структурах (struct). В отличие от классов, структуры в Swift не поддерживают наследование, но обладают огромной мощностью за счет функций и протоколов . К изучению классов курс перейдет только через месяц.
Вычисляемые свойства (Computed Properties)
Переменная body в ContentView является вычисляемой. Это означает, что её код выполняется заново каждый раз, когда системе нужно перерисовать интерфейс . Хэгарти пояснил, что это работает крайне эффективно благодаря внутренним оптимизациям Swift .
✨ Магия ViewBuilder и синтаксический сахар 1:04:34
Одной из самых сложных тем для новичков является ключевое слово @ViewBuilder. Оно позволяет писать древовидную структуру интерфейса без явного использования операторов return.
- Неявный возврат: Если внутри функции, помеченной
@ViewBuilder, перечислить несколькоView, компилятор автоматически упакует их вTupleView(«мешок с деталями») . - some View: Разработчику не нужно указывать точный сложный тип этого «мешка» (например,
TupleView<Image, Text>). Ключевое словоsomeприказывает компилятору самому вычислить конкретный тип, скрыв его сложность от программиста . - Trailing Closure (замыкание в конце): Если последний аргумент функции — другая функция, её можно вынести за скобки. Именно поэтому код выглядит не как
VStack(content: { ... }), а как наглядноеVStack { ... }.
В завершение лекции Пол продемонстрировал, как простым изменением VStack на HStack (горизонтальный) или ZStack (наложение слоев) можно полностью поменять логику отображения элементов без изменения самих «кирпичиков» контента .