iOS SwiftUI 2025

Стэнфордский курс 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.

Продолжение следует ….