iOS 14 + SwiftUI 2

Стэнфордский курс CS193p — «Developing  Application for iOS with SwiftUI» («Разработка приложений для iOS с помощью SwiftUI») объясняет как создавать приложения для iPhone и iPad, используя SwiftUI.  Предложенные в весеннем семестре 2021 года (Spring 2021) Лекции были прочитаны студентам Стэнфорда в формате on-line из-за продолжающейся пандемии коронавируса. В настоящий момент Стэнфорд делает всё возможное, чтобы сделать видео этих Лекций доступными для всех в YouTube, выкладывая их по две в неделю.

На сайте CS193p — «Developing Application for iOS» вы найдете материалы. которые были предоставлены студентам Стэнфорда в течение весеннего семестра 2021 г. : домашние задания и код демонстрационных примеров. К сожалению, мы не можем предложить вам тот же самый уровень поддержки, который мы предоставляем нашим студентам (on-line вопросы & ответы (Q&A),  консультации с преподавательским составом,  профессиональную оценку домашних заданий и т.д.), но материал, представленный на сайте, определённо поможет вам в понимании Лекций в процессе просмотра.  Как мы подчеркиваем для наших студентов, выполнение домашних заданий абсолютно необходимо для изучения материала этого курса.

SwiftUI — довольно новый продукт, выпущенный менее двух лет назад. Таким образом, вполне возможно, что к моменту просмотра, часть содержимого курса уже устареет из-за постоянного обновления SwiftUI, требующего некоторой корректировки кода. Это нормально для новых технологий.

Это не просто практический курс по программированию на iOS, но также курс о том, КАК сконструирована система разработки SwiftUI, что очень важно для обучения наших CS (Computer Science — Информатика) студентов, поэтому мы стараемся посвятить часть лекционного времени тому, КАК SwiftUI делает то, что он делает, а не только как повернуть в нем те или иные “ручки”, чтобы заставить его делать нужные нам вещи.

Немного о предварительных требованиях к этому курсу.

Студентам Стэнфорда рекомендовано взять хотя бы три, а на самом деле четыре вводных CS (Computer Science — Информатика) курса, так что они приходят на мой курс CS193P уже опытными программистами. В частности, одна из вещей, которую знают все студенты Стэнфорда, когда берут курс CS193P, это объектно-ориентированное программирование. Хотя на самом деле программирование с использованием SwiftUI не требует уж очень обширного применения объектно-ориентированное программирования, но концепции, которую вы изучаете в объектно-ориентированном программировании, такие, как экземпляры структур данных и инкапсуляция, действительно хорошие вещи, которые нужно знать, когда пытаешься понять, как работает SwiftUI.

Кроме того, SwiftUI требует от вас изучения нового язык программирования под названием Swift. У стэнфордских студентов, которые берут курс CS193P, уже трижды или четырежды был опыт изучения нового языка программирования, так что для них изучение нового языка программирования не требует больших усилий. Но если для вас Swift будет вашим вторым языком программирования или вы — вообще начинающий программист и это ваш первый язык программирования, то вам понадобятся значительные дополнительные усилия, чтобы усвоить весь материал этого курса.

Из всего этого можно сделать вывод, что этот  курс не предназначен для начинающих программистов. Однако, если вы только начинаете программировать или вообще не являетесь программистом, то вам будет очень интересно посмотреть Лекции первых 2-х недель, чтобы составить представление о том, на что это похожа разработка приложения для iOS.

Студенты Стэнфорда отдельно не изучают язык программирования Swift, поэтому мы с самого начала не предполагаем, что они что-нибудь знают о Swift. Мы будем проходить его шаг за шагом и призываем студентов следовать за нами. Домашние задания действительно требует, чтобы вы следовали этим шагам. Независимо от вашего уровня и опыта программирования, вы должны повторять все то, что мы делали на Лекции,  по крайней мере, на первых нескольких Лекциях.

Но затем … вы должны решить, куда вы хотите пойти дальше: будете продолжать курс CS193P или будете расширять свои навыки программирования с использованием приемлемых для вас ресурсов.

Материал, представленный в этом курсе, не разрабатывался с участием и не проверялся кем-либо из Apple, поэтому его не следует воспринимать как «истину в последней инстанции» по поводу того, как разрабатывать приложения с использованием SwiftUI. Мы сделали все возможное, чтобы самим понять эту технологию за короткое время ее появления, а затем поделиться тем, что узнали.

Наслаждайтесь!

Лекция 1. Начинаем со SwiftUI.

Первая лекция переходит прямо к созданию первого приложения этого семестра: игры на поиск совпадений под названием Memorize. Это будет основой учебного материала для первых нескольких недель. Демонстрация основ композиции элементов пользовательского интерфейса, используемой в SwiftUI, происходит в среде разработки Xcode.
Смотреть в YouTube.

Русскоязычный иллюстрированный конспект Лекции 1. Часть 1..
Русскоязычный иллюстрированный конспект Лекции 1. Часть 2..

Лекция 2. Узнаем больше о SwiftUI.

Разработка приложения Memorize продолжается. Создаем компоненты многократного использования (карта Card в игре) и комбинируем их при создании более сложных пользовательских интерфейсов.
Смотреть в YouTube
Задание на чтение № 1 (английский)
Задание на программирование № 1 (английский)
Русскоязычный
иллюстрированный конспект Лекции 2.

Лекция 3. MVVM и сиситема ТИПов в Swift.

Концептуальный обзор архитектурной парадигмы, лежащей в основе разработки приложений для iOS с использованием SwiftUI (известного как MVVM), и объяснение фундаментального компонента понимания языка программирования Swift: его системы ТИПов. Затем оба применяются к приложению Memorize, запущенному в первых двух лекциях.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 3.

Лекция 4. Ещё больше MVVM Перечисления enum Optionals.

Разработка приложения Memorize продолжается. Создаем компоненты многократного использования (карта Card в игре) и комбинируем их при создании более сложных пользовательских интерфейсов.
Смотреть в YouTube
Задание на чтение № 2 (английский)
Задание на программирование № 2 (английский)

Русскоязычный иллюстрированный конспект Лекции 4.

Лекция 5. Свойства. Расположение (Layout). @ViewBuilder.

Изучаем Наблюдатели Свойств, вычисляемые свойства, @State и @ViewBuilder. Рассматриваются механизмы, лежащие в основе расположения Views на экране, после чего проводится демонстрация, в которой выбирается лучший шрифт для каждой карточки в Memorize в зависимости от доступного места. Попутно улучшаем контроль доступа к внутреннему API Memorize.
Смотреть в YouTube

Русскоязычный иллюстрированный конспект Лекции 5.

Лекция 6. Протоколы protocol. Геометрические фигуры Shapes.

Обсуждение, пожалуй, самого важного ТИПа в Swift: протокола protocol. Демонстрация комбинации двух концепций: Generics и протоколов protocol , для того, чтобы карты лучше использовали пространство, доступное на экране. Наконец, объясняется Shape протокол и в игру Memorize добавляется таймер обратного отсчета в форме пирога (но еще без анимации).
Смотреть в YouTube
Задание на чтение № 3 (английский)
Задание на программирование № 3 (английский)

Русскоязычный иллюстрированный конспект Лекции 6.

Лекция 7. Модификаторы View. Анимация.

Объясняется протокол ViewModifier, который затем используется для того, чтобы сделать возможным преобразование любого View в карту игры Memorize путем «картафикации» ( от слова «карта»). Затем лекция переходит к углубленному рассмотрению анимации и начинает комплексную многолекционную демонстрацию анимации с использованием неявной анимации, чтобы заставить смайлик на Memorize карте вращаться, когда она совпадает с другой картой.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 7.

Лекция 8. Анимация. Большой демонстрационный пример.

Демонстрация анимации продолжается, показывая, как анимировать тасование, cдачу и переворот карт, а также их появление и исчезновение. Таймер обратного отсчета в форме пирога, добавленный на предыдущей лекции, также анимируется.
Смотреть в YouTube
Задание на программирование № 4 (английский)
L7+L8 Демо код.
Русскоязычный иллюстрированный конспект Лекции 8.

Лекция 9. EmojiArt. Drag & Drop.

Представлено новое демонстрационное приложение: EmojiArt. Здесь описано многое, включая перечисление enum, расширения extension, кортежи, перетаскивание Drag & Drop, цвета и изображения и многое другое. API Grand Central Dispatch (GCD) объясняется в рамках подготовки к демонстрации многопоточности на следующей Лекции.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 9.

Лекция 10. EmojiArt. Жесты.

После демонстрации того, как использовать GCD для загрузки фонового изображения из Интернета без блокировки отзывчивости пользовательского интерфейса, добавлены multitouch жесты для изменения масштаба и перемещения по экрану нашего документа в приложении EmojiArt.
Смотреть в YouTube
Задание на программирование № 5 (английский)
L9+L10 Демо код.
Русскоязычный иллюстрированный конспект Лекции 10.

Лекция 11. Постоянное хранение (Persistence). Обработка ошибок.

Ряд тем о постоянном хранении (UserDefaults, файловая система, Codable архивирование, JSON), а также то, как ошибки обрабатываются в Swift. Внесение изменений с тем, чтобы сделать документ EmojiArt постоянно сохраняемым, и добавление в EmojiArt новой ViewModel с именем PaletteStore.
Смотреть в YouTube

L9+L10 Демо код.
Русскоязычный иллюстрированный конспект Лекции 11.

Лекция 12. Binding. Sheet. Navigation. Edit Mode.

Подробная информация о многочисленных «Обертках» свойства (Property Wrappers), включая @State, @ObservedObject, @Binding, @Environment, @EnvironmentObject и @StateObject. Демонстрация новых элементов SwiftUI, включая TextField, Form, NavigationView, List, sheet, popover, Alert, EditMode и другие. Улучшение палитр эмодзи в EmojiArt.
Смотреть в YouTube
Задание на программирование № 6 (английский)
L11+L12 Демо код.
Русскоязычный иллюстрированный конспект Лекции 12.

Лекция 13. Publisher. Ещё о постоянном хранении.

Протокол Publisher используется для реализации более чистой версии кода загрузки фонового изображения в EmojiArt. CloudKit и CoreData кратко объясняются (но не демонстрируются). См. Бонусную лекцию от 2020 года ниже (Enroute, часть 2) для демонстрации CoreData.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 13.

Лекция 14. Архитектура Document.

Демонстрация использования архитектуры документов Document в SwiftUI для превращения EmojiArt в многодокументное приложение. Включает обсуждение App и Scene протоколов, WindowGroup, DocumentGroup, @SceneStorage, @ScaledMetric и других. Попутно мы добавляем Undo / Redo в EmojiArt.
Смотреть в YouTube
L13+L14 Демо код.
Русскоязычный иллюстрированный конспект Лекции 14.

Лекция 15. UIKit интеграция.

Заставьте EmojiArt работать на iPhone. Включает в себя дополнительную работу с toolbar, а также понимание того, как интегрировать функциональность UIKit в приложение SwiftUI.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 15.

Лекция 16. Multiplatform (macOS).

Превращаем EmojiArt в многоплатформенное приложение (т.е. как iOS, так и macOS). Демонстрируются различные способы совместного использования кода на разных платформах.
Смотреть в YouTube
L15+L16 Демо код.
Смотреть в YouTube
Русскоязычный иллюстрированный конспект Лекции 16.

БОНУСНЫЕ ЛЕКЦИИ (доступ к русскоязычным конспектам бесплатно).

Следующие две лекции (Enroute) были прочитаны весной 2020 года, а не весной 2021 года. Изложенный материал (Picker, использование Codable для извлечения данных из REST API и CoreData) по-прежнему актуален (по крайней мере, на весну 2021 года), поэтому эти лекции также включены сюда. Обновленный демонстрационный код (до Xcode 12) также включен (единственное существенное изменение — использование новой архитектуры приложения SwiftUI, то есть EnrouteApp.swift вместо SceneDelegate.swift и др.).

2020 Enroute Part 1.

Enroute Picker Codable REST API

Первая из двух бонусных лекций 2020 года посвящена Picker и создает новое демонстрационное приложение (Enroute), которое извлекает данные из REST API в Интернете с помощью механизма Codable, показанного ранее в курсе.
Смотреть в YouTube

Демо (как показано на Лекции).
Демо (обновлено для Xcode 12).
Русскоязычный иллюстрированный конспект Лекции Enroute Part 1.

2020 Enroute Part 2.

Core Data

Вторая из двух лекций 2020 года, в которых используется демонстрационное приложение Enroute. Добавляется база данных CoreData в Enroute для хранения исторических данных о рейсах.
Смотреть в YouTube

Демо (как показано на Лекции).
Демо (обновлено для Xcode 12).
Русскоязычный иллюстрированный конспект Лекции Enroute Part 2.

Как всегда русскоязычный вариант конспекта Лекции 1 выложен на сайте бесплатно:

Лекция 1 часть 1 
Лекция 1 часть 2 

Я очень советую начать с этой Лекции. Курс реально трудный.

Полный русскоязычный вариант неавторизованных конспектов лекций Стэнфордского курса  «CS193P Developing  Application for iOS with SwiftUI» Spring 2021 доступен по частям :

1-ая часть  
2-ая часть
3-ая часть

Внимание!! Лекции находятся в открытом доступе.