iOS 13 + Swift 5 + SwiftUI

Есть более новая версия этого курса «Developing Application for iOS» 2021, которая на этом сайте представлена на странице iOS 14 + SwiftUI 2.

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

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

SwiftUI — совершенно новый продукт, предоставленный Apple разработчикам всего за несколько месяцев до того, как этот курс прочитан.  Так что вполне возможно, что к тому времени, когда вы смотрите его, некоторая часть содержимого курса может устареть, так как происходят постоянные обновления SwiftUI. Они могут потребовать от вас некоторой корректировки во время просмотра. Но это нормально для новых технологий. 

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

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

Лекция 1. Логистика курса и введение в SwiftUI.

После обсуждения порядка прохождения этого курса, первая лекция посвящена созданию приложения для iOS (карточный игры на совпадение под названием Memorize). Среда разработки Xcode используется для демонстрации основ декларативного подхода для композиции элементов пользовательского интерфейса, используемого в SwiftUI.
Смотреть в YouTube.
Слайды
Русскоязычный неавторизованный конспект Лекции 1, часть 1.
Русскоязычный неавторизованный конспект Лекции 1, часть 2.

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

Лекция 3. Реактивный UI. Протоколы Protocols.  Layout.

Теперь. когда наша карточная игра Memorize создана с помощью MVVM, мы можем использовать РЕАКТИВНУЮ природу SwiftUI для того, чтобы заставить наши карты переворачиваться путем обработки «жестов» (multi-touch events), обновления нашей Model через  ViewModel и поддержания UI в синхронном состояние с нашей Model всё это время.  Детально рассматривается очень важная концепция, Protocols, а также освещаются основы расположения (layout) Views в UI.
Смотреть в YouTube
Слайды
Русскоязычный неавторизованный конспект Лекции 3.

Лекция 4.  Grid. Перечисления Enum. Optionals.

Обзор системы ТИПОВ в Swift заканчивается дискуссией о перечислениях Enum.  Такая важная концепция языка программирования Swift, как Optionals, объясняется как на слайдах, так и на демонстрационном примере Memorize по мере того, как мы полностью отрабатываем логику функционирования этой карточной игры.
Смотреть в YouTube
Слайды
GridLayout.swift
Задание на чтение № 2 (английский)
Задание на программирование № 2 (английский)
Русскоязычный неавторизованный конспект Лекции 4.
Задание на программирование № 2 (русский)

Лекция 5. ViewBuilder. Shape. ViewModifier.

Управление доступом (Access Control).  Больше о рисовании, включая конструирование @ViewBuilder для условного списка Views, протокол protocol  Shape для нестандартного рисования и ViewModifier, механизм для создания пошаговых модификаций Views.
Смотреть в YouTube.
Слайды
Русскоязычный неавторизованный конспект Лекции 5.

Лекция 6. Animation.

@State (временное состояние в View) и Наблюдатели свойств ( property observers).  Погружение в анимацию, включая неявную и явную анимацию, переходы (transitions), анимация геометрических фигур Shape, создающие анимацию ViewModifiers и более.  Анимация переворота карт, новая игра (new game) и и начисления бонусов при быстром поиске «совпадающих» карт.
Смотреть в YouTube.
Слайды.
Задание на чтение № 3 (английский)
Задание на программирование № 3 (английский)
Русскоязычный неавторизованный конспект Лекции 6.
Задание на программирование № 3 (русский)

Лекция 7. Multithreading EmojiArt.

Идет разработка совершенно нового демонстрационного примера EmojiArt, начиная с обзора MVVM, а затем с использованием таких API, как ScrollView, UIImage и Drag & Drop.  После рассмотрения концепции многопоточности (multithreading), она используется для предотвращения блокировки пользовательского интерфейса при получении изображения (image) из сети в фоновом (background) режиме.
Смотреть в YouTube.
Слайды
EmojiArtExtensions.swift
Демо код
Русскоязычный неавторизованный конспект Лекции 7.

Лекция 8. Gestures. JSON.

Рассматривается пара тем (UserDefaults API и JSON encoding/decoding), связанных с постоянным хранением (persistence) , а также концептуальные основы обработки «жестов» мультитач (multi-touch gesture). Затем усовершенствуется демонстрационный пример EmojiArt в плане постоянного хранения (persistence) внесенных изменений и поддержки мультитач «жестов» pinching (жест сведения и разведения  пальцев), используемого для масштабирования, и pan (движение пальца по экрану) для перемещения документа по экрану.
Смотреть в YouTube.
Слайды.
AnimatableSystemFontModifier.swift
Демо код
Задание на программирования № 4 (английский)
Задание на программирование № 5 (английский)
Русскоязычный неавторизованный конспект Лекции 8.
Задание на программирования № 4 (русский)
Задание на программирование № 5 (русский)

Лекция 9. Data Flow.

Обсуждаются «Обертки Свойств», Property Wrappers, (типа @Published, @EnvironmentObject, @Binding) обсуждаются наряду с «издателями» Publishers.  Затем EmojiArt использует их для автосохранения и для поддержки выбора между множеством палитр с эмоджи .

Смотреть в YouTube.
Слайды.
EmojiArtDocumentPalette.swift
Демо код
Русскоязычный неавторизованный конспект Лекции 9.

Лекция 10. Modal Presentation и Navigation.

Расширение возможностей UI с помощью методов модального представления и навигации. Получение текста от пользователя через TextField. Понимание ТИПа KeyPath. Хранение множества EmojiArt документов.

Смотреть в YouTube.
Слайды.
EmojiArtDocumentStore.swift
EditableText.swift
Демо код
Задание на программирования № 6 (английский)
Русскоязычный неавторизованный конспект Лекции 10.
Задание на программирования № 6 (русский)

Лекция 11. Enroute Picker.

Первая из последних 4-х Лекций, которые освещают темы, которые студенты могут использовать в своих финальных проектах. Picker. Введение в демонстрационный пример Enroute.

Смотреть в YouTube.
Слайды
Демо код
Русскоязычный неавторизованный конспект Лекции 11

Лекция 12. Core Data

Объектно-ориентированная база данных Core Data. Демонстрационный пример добавляет базу данных Core Data для Enroute.

Смотреть в YouTube.
Слайды
Демо код
Русскоязычный неавторизованный конспект Лекции 12.

Лекция 13. Persistence (Постоянное хранение)

CloudKit и доступ к файловой систем. Хранение EmojiArt документов в файловой системе.

Смотреть в YouTube.
Слайды
Демо код
Русскоязычный неавторизованный конспект Лекции 13.

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

Интеграция пре-SwiftUI iOS кода в SwiftUI. Добавление кари в Enroute. Изменение фонового изображения EmojiArt на изображение, полученное с фотокамеры.

Смотреть в YouTube.
Слайды
Enroute Демо код
EmojiArt Демо код
Русскоязычный неавторизованный конспект Лекции 14.

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