Пол Хэгарти: «SwiftUI — это не объектно-ориентированное программирование»

Stanford Online 59,1 тыс. 1 ч 10 мин 4 мин 14.11.2025
Главное

Легендарный курс Стэнфордского университета CS193p возвращается в 2025 году с обновленной программой по SwiftUI. Профессор Пол Хэгарти, обучающий разработке под iOS уже полтора десятилетия, в первой лекции закладывает фундамент: от философских отличий Swift от объектно-ориентированных языков до детального разбора того, как работает «магия» декларативного интерфейса Apple.

🎓 Обзор курса и философия обучения 0:05

Пол Хэгарти преподает этот курс практически с момента выхода первого iPhone . Основной упор сделан на разработку под iPhone и iPad, однако благодаря универсальности SwiftUI, полученные знания применимы для создания приложений под macOS, Apple Watch, tvOS и даже visionOS .

Главное отличие курса в 2025 году — акцент на современных парадигмах. Хэгарти подчеркивает, что SwiftUI — это не объектно-ориентированное программирование (ООП), к которому привыкли многие разработчики . Вместо него студенты будут изучать:

Курс построен по «нарративному» принципу: вместо разрозненных примеров (vignettes) студенты вместе с преподавателем в течение 6–7 недель строят одно массивное приложение — игру CodeBreaker . Хэгарти считает, что только так можно понять, как компоненты взаимодействуют в реальном масштабе.

🛠 Инструментарий: Xcode и симуляторы 13:06

Xcode — основная рабочая среда, которая требует детального изучения из-за своей сложности. Хэгарти провел «спиральный тур» по интерфейсу :

  1. Навигатор (слева): управление файлами проекта, поиск, просмотр истории сборок и работа с активами (Assets) .
  2. Панель управления (вверху): выбор цели запуска. Приложения можно запускать на симуляторах различных моделей iPhone/iPad или напрямую на физическом устройстве через кабель или Wi-Fi .
  3. Инспектор (справа): позволяет настраивать свойства элементов UI (шрифты, цвета) визуально, при этом Xcode автоматически генерирует соответствующий код в редакторе .
  4. Консоль и отладчик (снизу): вывод сообщений системы и отслеживание состояния переменных при сбоях .

Особое внимание уделено Preview Canvas — инструменту «живого» просмотра. Код компилируется в реальном времени: любое изменение текста или цвета в редакторе мгновенно отображается на макете iPhone справа .

🧱 Анатомия SwiftUI: Теория «Лего» 52:29

Для объяснения того, как устроены View в SwiftUI, Пол Хэгарти использует аналогию с конструктором Lego . В этой системе всё является «кирпичиком» определенного типа:

💻 Погружение в синтаксис 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.

В завершение лекции Пол продемонстрировал, как простым изменением VStack на HStack (горизонтальный) или ZStack (наложение слоев) можно полностью поменять логику отображения элементов без изменения самих «кирпичиков» контента .

💬 Цитаты

«SwiftUI — это не объектно-ориентированное программирование. Это функциональное или протокол-ориентированное программирование.»

Пол Хэгарти 02:14

«В Swift переменные всегда должны иметь тип и всегда должны иметь значение. Понятия 'ничего' не существует вне типа Optional.»

Пол Хэгарти 46:32

«Мы используем 'нарративный' подход: за 7 недель мы напишем одну большую программу, как будто пишем роман.»

Пол Хэгарти 08:40
👥 Спикер
📚 Упомянутые книги
🔗 Упомянутые сайты и проекты
📖 Термины
VStack
Контейнер в SwiftUI, который располагает дочерние элементы вертикально один под другим.
some View
Непрозрачный тип данных, указывающий, что функция вернет какой-то объект, соответствующий протоколу View, без уточнения конкретного типа для разработчика.
ViewBuilder
Специальный атрибут (DSL), позволяющий перечислять View внутри замыкания без явных операторов возврата.
Preview Canvas
Инструмент в Xcode для визуализации интерфейса приложения в реальном времени при написании кода.
📊 Цифры
🗓 Хронология
  1. 2025 Запуск обновленного курса CS193p в Стэнфорде.
  2. Недели 1-7 Создание основного приложения CodeBreaker в рамках учебного нарратива.
  3. Последние 3 недели Работа студентов над индивидуальными финальными проектами.
⚖️ Другая сторона
Образование SwiftUI Xcode Swift Stanford University iOS