Стэнфордский курс CS193p — «Developing Application for iOS with SwiftUI» («Разработка приложений для iOS с помощью SwiftUI») объясняет как создавать приложения для iPhone и iPad, используя SwiftUI.
Пол Хегарти — преподаватель, ведущий курс CS193p в Стэнфорде с 2010 года.
Ниже вы найдете ссылки на видео и вспомогательные материалы курса CS193p (Разработка приложений для iOS с использованием SwiftUI) Стэнфордского университета (весна 2025 года). Этот курс предназначен для студентов Стэнфорда и знакомит с основами разработки iOS-приложений.
Курс проходил до выхода iOS 26 и Xcode 26, но код, написанный во время курса, в основном совместим с ними. Главное изменение в Xcode 26, конечно же, — это встроенная поддержка LLM, а в iOS 26 появилась функция Liquid Glass в пользовательском интерфейсе, поэтому, разумеется, в этих видео её нет.
К сожалению, мы не можем оказывать вам поддержку во время просмотра этих видео, но в интернете есть множество замечательных ресурсов, которые помогут вам в вашем стремлении научиться разрабатывать iOS-приложения, поэтому обязательно воспользуйтесь ими!
P.S. В русскоязычных иллюстрированных конспектах Лекций сделаны пометки на полях, касающиеся некоторых изменений в Xcode 26 и iOS 26.
Код, сопровождающий Лекции, находится на GitHub.
Лекция 1. Начало работы со SwiftUI.
Введение в курс. Основы SwiftUI и Xcode, особенно Views.
Пол Хегарти дает обзор курса, описывает необходимые предварительные условия (умение писать большой объем кода, опыт структурированного программирования) и объясняет структуру курса, которая использует «нарративный подход», где студенты создают одно большое приложение (CodeBreaker) в течение 6-7 недель, а не изучают материал по небольшим фрагментам кода.
Он проводит всесторонний обзор интерфейса Xcode и знакомит с основами SwiftUI View, используя аналогию с конструктором Lego, сравнивая базовые Views (Text, Image, Circle) с кубиками Lego, составные Views (ContentView) с собранными законченными фрагментами Lego, View-контейнеры (VStack) с инструкциями по сбору фрагментов Lego, а коллекции Views — с «мешками Lego» .
Лекция также охватывает основы синтаксиса Swift, включая структуры struct, переменные var и концепцию some View как вычисляемого свойства.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 1.
Задание на чтение 1.
Код на GitHub.
Лекция 2. Больше о SwiftUI. Создание приложения Code Breaker.
Продолжается объяснение разработки на SwiftUI с введением модификаторов View, второго основного столпа построения UI, наряду с View. Демонстрируется, как модификаторов View работают в виде цепочек функций, возвращающих измененные View, с такими примерами, как .font(), .foregroundStyle() и .padding(). Объясняется, как модификаторы View применяются по порядку и могут передаваться от контейнерных View к их дочерним элементам.
Затем лекция переходит к созданию приложения Code Breaker, созданию и размещению фишек pegs в игре, а затем к созданию маркеров с использованием Shapes с такими модификаторами, как .fill(), .stroke() и .opacity(). Рассматривается создание пользовательских структур, которые ведут себя как View, перемещение View в отдельные файлы, использование перечислений enum (для состояний совпадения, таких как .exact, .inexact, .nomatch).
Вводятся концепции функционального программирования, такие как count(where:) для обработки массивов. В лекции подчеркивается важность декомпозиции как решающего фактора для удобства сопровождения кода и производительности компилятора.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 2.
Задание на программирование 1.
Код на GitHub.
Лекция 3. Модель и UI; система ТИПов в Swift.
Введение в курс. Основы SwiftUI и Xcode, особенно Views.
Пол Хегарти дает обзор курса, описывает необходимые предварительные условия (умение писать большой объем кода, опыт структурированного программирования) и объясняет структуру курса, которая использует «нарративный подход», где студенты создают одно большое приложение (CodeBreaker) в течение 6-7 недель, а не изучают материал по небольшим фрагментам кода.
Он проводит всесторонний обзор интерфейса Xcode и знакомит с основами SwiftUI View, используя аналогию с конструктором Lego, сравнивая базовые Views (Text, Image, Circle) с кубиками Lego, составные Views (ContentView) с собранными законченными фрагментами Lego, View-контейнеры (VStack) с инструкциями по сбору фрагментов Lego, а коллекции Views — с «мешками Lego» .
Лекция также охватывает основы синтаксиса Swift, включая структуры struct, переменные var и концепцию some View как вычисляемого свойства.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 3.
Задание на чтение 2.
Код на GitHub.
Лекция 4. Построение Модели CodeBreaker.
Создание модель CodeBreaker и подключение к ней UI. Попутно используются @State, Optional и onTapGesture. CodeBreaker теперь доступен для игры!
Эта лекция посвящена реализации разделения Модели и UI в CodeBreaker.
Создается Модель игры CodeBreaker, включающая CodeBreaker (основная игровая логика), Code (с перечислением enum Kind для типов Code master/guess/attempt ) и Peg (реализованный просто как псевдоним ТИПа для Color).
Затем создается CodeBreakerView, который становится визуальным воплощением Модели. Ключевые концепции включают: правильную организацию файлов, использование @State для изменяемого состояния UI, пометку функций как mutating в структурах struct, которые могут быть изменяемыми, развертывание Optional с помощью if-let , операторы nil объединения и multi-touch ввод с помощью onTapGesture().
Демонстрируется, как SwiftUI автоматически обновляет UI при изменении Модели, реализуется Tap-цикл выбора Peg. Обсуждается важность разделения логики Модели от презентации UI.
К концу лекции CodeBreaker становится полностью работающей игрой.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 4.
Задание на программирование 2.
Код на GitHub.
Лекция 5. Layout (Маке); Поток Данных (Data Flow).
Как SwiftUI размещает элементы UI на экране — Layout.
Также обсуждается, как данные передаются между Views в SwiftUI приложении.
Введение в функциональное программирование.
Контейнерные Views, такие как HStack / VStack, сначала предоставляют пространство для наименее гибких Views (текст Text, изображение Image), а затем для более гибких (круг Circle, прямоугольник Rectangle).
Ключевые концепции Layout включают
- Spacer для гибкого отступа,
- layoutPriority() для переопределения порядка по умолчанию и
- «ленивые» контейнеры (LazyVStack, LazyHGrid) для повышения производительности при работе с большими наборами данных.
- Представлены продвинутые контейнеры, такие как Form, List, Grid и ViewThatFits.
Объясняются View модификаторы ZStack: overlay / background, отладка с цветным фоном и то, как такие View модификаторы, как .padding, участвуют в Layout.
Демонстрируется применение функционального программирования с использованием функции map() для преобразования массивов, показан захват замыканием локальных переменных и рефакторизация функции matchAgainst() с использованием методов функционального программирования вместо циклов for, подчеркивая мощь и элегантность функциональных подходов в Swift.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 5.
Код на GitHub.
Лекция 6. Демонстрация Data Flow).
Эта лекция полностью посвящена демонстрациям и охватывает продвинутые Data Flow паттерны в SwiftUI.
Реализован интерфейс «клавиатуры» для выбора peg, улучшающий ввод данных пользователем по сравнению с методом «циклического Tap».
Ключевые темы включают:
- организацию файлов с рефакторингом «извлечение в файл» (Extract to File),
- создание PegView как многоразового компонента,
- использование комментариев // MARK для организации кода,
- реализацию @State для отслеживания выбора selection
- создание кнопок Button с пользовательскими Views в качестве меток.
Демонстрируется поток данных Data Flow от ввода пользователя через взаимодействие с Views до обновления Модели, показывая, как Views становятся визуальными проявлениями состояния Модели.
Представлен цикл ForEach без индексов indices, когда данные уникальны, расширение extension для добавления пользовательской функции Color.gray() с параметром яркости brightness, а также разница между CGFloat (для рисования) и Double (для общих математических вычислений).
В данной реализации демонстрируются такие практические паттерны SwiftUI, как синтаксис «хвостовых» замыканий с несколькими замыканиями, операторы guard для защитного программирования и правильное @State управление состоянием UI, которое не должно находиться в Модели.
Смотреть в YouTube.
Русскоязычный иллюстрированный конспект Лекции 6.
Задание на программирование 3.
CodeBreaker ↳
Код на GitHub.
Продолжение следует ….