CS193P Spring 2021 (SwiftUI). Видео-курс
Курс CS193P Spring 2021 — это популярный курс по программированию, состоящий из лекций, прочитанных студентам Стэнфордского университета, которые прошли курс CS193p по разработке приложений для iOS с использованием SwiftUI, в весеннем квартале 2021 года. CS193P Spring 2021 на русском языке переведен и озвучен с помощью технологий машинного перевода Яндекс. Имеются английские субтитры.
С первых лекций Пол Хегарти рассказывает о логистике курса, а затем сразу же приступает к созданию приложения для iOS (игра для подбора карт под названием Memorize). Обратите внимание, что это не активный онлайн-курс. Это выпуск видеозаписей лекций, которые уже были предоставлены студентам Стэнфорда в рамках его обычной учебной программы.
Материалы курса (домашние задания и демонстрационный код) доступны по адресу https://cs193p.stanford.edu
Темы курса CS193P Spring 2021
Курс по SwiftUI CS193P Spring 2021 состоит из 16-ти лекций и освещает следующие темы разработки iOS приложений:
Название темы лекции | Описание и содержание лекции |
---|---|
Лекция 1. Начало работы с SwiftUI | Пол Хегарти рассказывает о логистике курса, а затем сразу же приступает к созданию приложения для iOS (игра для подбора карт под названием Memorize). Среда разработки Xcode используется для демонстрации основ декларативного интерфейса SwiftUI для создания пользовательских интерфейсов. |
Лекция 2. Узнать больше о SwiftUI | Серия видеолекций, прочитанных студентам Стэнфордского университета весной 2021 года, продолжается завершением первого прототипа пользовательского интерфейса для карточной игры под названием Memorize. Очень важная концепция представлений занимает центральное место, поскольку основные механизмы компоновки SwiftUI (укладка и сетка) используются для ввода в игру нескольких карт, каждая из которых построена из многоразового представления “карты”. Простая демонстрация работы с жестом касания приводит к переворачиванию карт, а в пользовательский интерфейс добавляется пара кнопок для управления количеством карт в игре. |
Лекция 3. MVVM и система типов Swift | Лекция 3 итерации Стэнфордского весеннего 2021 года курса CS193p (Разработка приложений для iOS) начинается с концептуального обзора архитектурной парадигмы, лежащей в основе разработки приложений для iOS (известной как MVVM), и объяснения фундаментального компонента понимания языка программирования Swift: его системы типов. Затем оба они применяются к приложению запоминания, запущенному в первых двух лекциях. Невозможно разрабатывать приложения для iOS с использованием SwiftUI без использования архитектуры MVVM для организации вашего кода. В этой лекции объясняется, что это такое, а затем демонстрируется, как это работает в демонстрационном приложении Memorize. Разработка SwiftUI происходит полностью на языке программирования Swift. Swift уникален своей поддержкой большинства современных языковых функций, включая объектно-ориентированное программирование, функциональное программирование и протокольно-ориентированное программирование. Поскольку многое из этого является новым для большинства студентов Стэнфорда, эта лекция начинает процесс объяснения того, как работает Swift, охватывая основы его системы типов, включая структуры и классы, обобщения и функции как типы. Затем Memorize переходит на следующий уровень, заполняя свою архитектуру MVVM, реализуя части приложения Model и ViewModel, одновременно используя как общие, так и функции в качестве типов. |
Лекция 4. Запоминание игровой логики | Серия видеолекций, прочитанных студентам Стэнфордского университета весной 2021 года, продолжается завершением архитектуры MVVM в демонстрации Memorize с использованием ViewModel для построения представления. Вводится мощный синтаксис перечисления Swift, а также специальное необязательное перечисление. Лекция завершается использованием дополнительной конструкции в Memorize как части завершения ее игровой логики. Семантика языка программирования Swift для перечислений особенно мощна и контрастирует со многими языками, преподаваемыми на вводных курсах информатики в Стэнфорде. Перечисления в Swift позволяют хранить данные в каждом случае сопоставления, создавать вспомогательные методы непосредственно в перечислении, сопоставлять шаблоны в операторах switch и многое другое. Кроме того, огромное количество стандартных библиотек Swift используют перечисление Необязательно в своей функциональности, а язык программирования Swift добавляет полезный синтаксис для управления опциями. Опции также находят применение в изящной обработке ошибок, когда операция может привести к возврату желаемого значения, а может и не привести. Это применяется непосредственно в Запоминании в заключительной демонстрации, и лекция завершается основными функциями запоминания в рабочем состоянии. |
Лекция 5. Макет свойств @ViewBuilder | Видео 5 из серии лекций по разработке SwiftUI, прочитанных в Стэнфорде в весеннем квартале 2021 года, начинается с переопределения необходимости и вариантов использования @State, в то же время более конкретно объясняя его использование памяти. В более широком смысле в этой лекции понятие свойств расширяется, чтобы включить вычисляемые свойства и наблюдателей свойств. Затем мы переходим к следующей важной теме: архитектуре для отображения видов на экране. Это включает в себя более подробную информацию о представлениях объединителя, некоторые инструменты для изменения макета представления, такие как GeometryReader, overlay и background, а также директиву @ViewBuilder, которая обеспечивает синтаксическую поддержку для построения (иногда условных) списков представлений. Многие из них демонстрируются в игре «Запоминание» путем автоматического изменения размера шрифта эмодзи в игре в соответствии с доступным пространством. Попутно ужесточается “контроль доступа” к внутренним API-интерфейсам Memorize и демонстрируются многочисленные функции XCode, такие как переименование и сворачивание. |
Лекция 6. Формы протоколов | Лекция 6 Стэнфордского курса разработки CS193p SwiftUI, прочитанная весной 2021 года, завершила обсуждение системы типов Swift объяснением, возможно, самого важного типа типов в Swift: протоколов. Мы затрагиваем ряд концепций протокола, включая концептуализацию расширений протокола «ограничения и выгоды», совместное использование дженериков и протоколов, а также наследование протоколов. После объединения концепций протоколов и обобщений в игре «Запоминание» для определения размера карт в соответствии с доступным пространством на экране путем создания AspectVGrid лекция переходит к теме рисования произвольных фигур с использованием протокола Shape. Мы оглядываемся назад на ранее использовавшиеся модификаторы для придания формы like .fill(), который мы теперь можем более глубоко понять благодаря нашим исследованиям дженериков и протоколов. Мы завершаем эту лекцию, улучшая нашу игру памяти, чтобы нарисовать таймер обратного отсчета в форме круга, используя пользовательскую форму и ViewBuilder, которые будут анимированы в следующей лекции. |
Лекция 7. Анимация Модификатора просмотра | Лекция 7 Стэнфордского курса разработки CS193p для iOS, который начнется весной 2021 года, начинается с объяснения ViewModifier, включая демонстрацию того, как создать пользовательский Cardify ViewModifier для игры Memorize. Затем лекция переходит к углубленному рассмотрению анимации, охватывая такие темы, как неявная и явная анимация, структуры анимации, переходы, эффекты согласованной геометрии, влияние видов контейнеров, анимация форм, анимация модификаторов вида и многое другое. Мы начинаем первую часть демонстрации, состоящей из двух лекций, с иллюстрации того, как использовать неявную анимацию для вращения эмодзи, когда карта успешно подобрана в нашей игре на запоминание. На протяжении всего этого процесса мы постоянно обращаемся к некоторым золотым правилам анимации и демонстрируем, как использовать их для диагностики проблем, когда наши анимации ведут себя не так, как мы ожидаем. |
Лекция 8. Демонстрация анимации | После того, как мы узнали все об анимации из предыдущей лекции, видео 8 Стэнфордского курса разработки CS193p для iOS, который начнется весной 2021 года, полностью состоит из демонстраций, показывающих, как использовать анимацию для улучшения нашей игры на запоминание. Мы узнаем, как анимировать внешний вид (раздачу) карт с помощью matchedGeometryEffect, переворачивание карт с помощью AnimatableModifier, перетасовку и выбор карт с использованием явной анимации, а также обратный отсчет бонусного времени на карте, анимируя форму круга из предыдущей лекции. Мы также обсудим, как задерживать анимацию и использовать @State с анимацией. |
Лекция 9. Многопоточность перетаскивания Emoji Art | Лекция 9 Стэнфордского курса разработки iOS весной 2020 года начинается с нескольких разных тем (Коллекции идентифицируемых объектов, UIColor, UIImage и поставщики элементов), а затем переходит к совершенно новой демонстрации, EmojiArt, сначала рассматривающей MVVM, а затем использующей SwiftUI API, такие как перечисления, инициализаторы, расширения, кортежи и перетаскивание. Бросьте, чтобы создать зачатки инструмента “emoji artist’s”. После демонстрации концепция многопоточности с использованием Grand Central Dispatch объясняется в рамках подготовки к поддержке перетаскивания изображения из Интернета в EmojiArt в следующей лекции. |
Лекция 10. Демонстрационные жесты многопоточности | После демонстрации того, как использовать многопоточность, чтобы загрузка перетаскиваемого фонового изображения из Интернета не блокировала отзывчивость EmojiArt, в лекции 10 Стэнфордского курса CS193p по разработке iOS, который начнется весной 2021 года, рассказывается о том, как обрабатывать мультитач-жесты. В EmojiArt добавлены жесты щипка и перетаскивания для увеличения масштаба и панорамирования, чтобы увидеть наши “произведения искусства (эмодзи)” в более великолепных деталях. |
Лекция 11. Постоянство обработки ошибок | Лекция 11 Стэнфордского курса разработки iOS, который начнется весной 2021 года, охватывает ряд тем сохранения (пользовательские ошибки, Файловая система, кодируемое архивирование и кодирование / декодирование JSON), а также то, как обрабатываются ошибки в Swift. Мы начинаем добавлять эти возможности в EmojiArt, делая его модель конвертируемой в / из JSON (используя кодируемый протокол), а затем автоматически сохраняя документ EmojiArt (на данный момент) в файловой системе. Мы также вводим новую ViewModel в EmojiArt, PaletteStore (постоянное хранилище палитр смайликов), которое мы будем использовать для значительного улучшения нашего пользовательского интерфейса emoji palette в следующей лекции. |
Лекция 12. Режим редактирования навигации по листу Привязок | Лекция 12 Стэнфордского курса CS193p Spring 2021 года посвящена оболочкам свойств в SwiftUI, в которой рассматриваются такие оболочки, как @ObservedObject и @State, а также рассматриваются новые, такие как @Binding, @Environment, @EnvironmentObject и @StateObject. После этого мы погружаемся в захватывающую демонстрацию, которая иллюстрирует множество функций пользовательского интерфейса Swift, включая текстовые поля, формы, навигационные представления, Списки, таблицы, всплывающие окна, оповещения, режим редактирования и многое другое. В частности, мы начинаем с добавления контекстного меню, которое позволяет нам создавать новые палитры, удалять палитры и переключаться между палитрами. Затем мы добавляем всплывающее окно и форму в наш документ EmojiArt, который позволяет редактировать палитру смайликов с помощью @Binding. Мы еще больше улучшим пользовательский интерфейс для управления всеми нашими палитрами смайликов. Этот пользовательский интерфейс будет использовать ряд механизмов SwiftUI, включая контекстные меню, режим редактирования и переход между представлениями с помощью NavigationViews и NavigationLinks. |
Лекция 13. Проявите больше настойчивости | Лекция 13 Стэнфордского курса разработки iOS, который начнется весной 2021 года, посвящена основам протокола Publisher. Мы будем использовать его для реализации гораздо более чистой и читаемой версии нашего кода фоновой загрузки. После этого вводятся и кратко объясняются два других важных механизма сохранения, CloudKit и Core Data. CloudKit — это механизм для хранения данных пользователя в облаке, чтобы они отображались на всех его устройствах. Обсуждаются соответствующие типы данных, а также основы его API для создания записей, запроса к ним и взаимодействия с ними в вашем коде. Core Data — это платформа для объектно-ориентированной базы данных, размещенной поверх реляционной базы данных. Основные данные были продемонстрированы в весенней итерации CS193p 2020 года. |
Лекция 14. Архитектура документов | Лекция 14 Стэнфордской весенней 2021 итерации курса CS193p начинается с обзора протоколов приложений и сцен. Затем мы более подробно обсудим WindowGroup, @SceneStorage и @ScaledMetric, прежде чем перейти к демонстрации, в которой мы используем эти API для реструктуризации нашего приложения EmojiArt, сохранения состояния нашего приложения и документов и соответствующего масштабирования размеров наших смайликов. Мы также участвуем в углубленном обсуждении документов группы документов и справочных файлов, прежде чем использовать эту архитектуру документов SwiftUI для реализации гораздо более сжатой версии нашего кода EmojiArtDocument. Наконец, используя UT Types и Undo, мы создаем новый тип документа, доступ к которому можно получить через собственное приложение iPhone Files и который может поддерживать функции отмены и повтора. |
Лекция 15. Интеграция UIKit | В предпоследней лекции Стэнфордского курса разработки iOS, который начнется весной 2021 года, мы сосредоточимся на том, как заставить EmojiArt хорошо работать на iPhone. Это включает в себя изучение еще большего количества панелей инструментов (например, на iPhone не так много места для панелей инструментов в портретном режиме, поэтому мы показываем одну стратегию адаптации к этому), а также выяснение того, как интегрироваться с функциональностью предыдущего поколения разработки iOS, UIKit. Мы добавили множество новых способов установки фонового изображения в EmojiArt, в том числе путем вставки изображения, фотографирования с помощью камеры и выбора фонового изображения из библиотеки фотографий пользователя. |
Лекция 16. Мультиплатформенность (macOS + iOS) | В заключительной лекции итерации курса CS193p, проводимого в Стэнфорде весной 2021 года, мы сосредоточимся на мультиплатформенной поддержке, то есть на том, как заставить приложение работать на iPad, iPhone и macOS. Мы демонстрируем, как адаптировать наш код EmojiArt для iOS для создания приложения для macOS, используя различные примеры стратегий для совместного использования кода на разных платформах. Создание кроссплатформенных приложений всегда требует некоторой специфичной для платформы идиоматической поддержки, но в SwiftUI огромное количество кода, который мы пишем, может быть нацелено на все платформы. Инфраструктура приложений SwiftUI здесь особенно удобна, потому что она автоматически обрабатывает все создание меню (что необходимо только на Mac). |