Лекция 10 CS193P Spring 2020 — Модальное представление и Навигация.

На Лекции 10 курса Стэнфорда  CS193p — «Developing  Application for iOS» («Разработка приложений для iOS») Пол Хэгерти показывает очень большой демонстрационный пример, почти полностью посвященный темам, относящимся к представлению Views на экране. 

В некотором смысле мы уже знаем, как это можно делать. ForEach выводит Views на экран и убирает с экрана. А также if-elses внутри @ViewBuilders заставляет Views появляться и уходить с экрана. Но на Лекции 10 мы будем говорить о больших группировках Views, Views, которые могут занять весь экран полностью, Views, которые могут управляться своими собственными MVVMs. Мы еще не видели приложений, у которых есть множество ViewModels. Но, конечно, большинство больших программ имеют много ViewModels.

Темы демонстрационного примера Лекции 10:

  • .sheet
  • .popover
  • TextField
  • Form
  • Больше об “Ограничениях и Выгодах” (Constraints and Gains) через улучшение Grid.
  • Удаление с экрана модально представленных Views через @Binding.
  • Множество MVVM в одном приложении.
  • Hashable и Equatable
  • NavigationView + NavigationLink + .navigationBarTitle / Items
  • Alerts
  • Уничтожение в ForEach с помощью .onDelete
  • EditButton
  • EditMode @Environment переменная (@Binding)
  • Установка @Environment переменных 
  • .zIndex

Читать далее

Лекция 9 CS193P Spring 2020 — Поток данных (Data Flow).

На Лекции 9 курса Стэнфорда  CS193p — «Developing  Application for iOS» («Разработка приложений для iOS») Пол Хэгерти рассматривает супер важную тему — Property Wrappers (“Обертки Свойства”). Мы наконец-то поймем, что такие вещи, как @State и @Published, делают “под капотом”. Далее профессор слегка затрагивает тему “издателей” Publishers, потому что если мы начинаем говорить о @Published, то быстро приходим к этой очень важной теме, однако на этой Лекции 9 дается лишь некоторый обзор на эту тему, более подробно эта тема будет обсуждаться позже. 

Затем мы погружаемся в демонстрационный пример, в котором профессор показывает нам где, когда и как используются “издатели” Publishers, а также говорит о @Binding, который является новой для нас Property Wrapper (“Оберткой Свойства”). Сочетание этих двух механизмов позволяет нам ссылаться на «единственный источник истины» (source of truth) для данных, а не требовать их копирования, что может быть подвержено ошибкам.

Читать далее

Лекция 6 CS193P Spring 2020 — Animation.


На Лекции 6 курса Стэнфорда  CS193p — «Developing  Application for iOS» («Разработка приложений для iOS») вначале рассматриваются две короткие темы: Наблюдатели Свойства (Properties Observer) и @State. На  Наблюдателях Свойства (Properties Observer), как синтаксической конструкции языке Swift, профессор долго не задерживается, а вот @State, этому маленькому временному хранилищу, используемое в вашем View

Далее профессор полностью погружается в основную тему дня — Анимацию. Это великолепная Лекция на эту тему, нигде вы не найдете столько материала, собранного на тему анимации, и столько нюансов использования различных типов анимации. Рассматриваются четыре чрезвычайно важных аспекта Анимации:

  1. Неявная и явная анимация, 
  2. Анимация Views (через их модификаторы ViewModifiers, которые реализуют Animatable протокол)
  3. Transitions (анимируют появление / исчезновение Views с помощью определенных ViewModifiers)
  4. Анимация Shapes (через  Animatable протокол)

Читать далее

Лекция 5 CS193P Spring 2020 — ViewBuilder+Shape+ViewModifier.

На Лекции 5 курса Стэнфорда  CS193p — «Developing  Application for iOS» («Разработка приложений для iOS») рассматриваются три чрезвычайно важных темы:

  1. @ViewBuilder — Что в действительности является аргументом для ZStack, ForEach, GeometryReader и т.д.?
  2.  Shape — я хочу создать своё собственное View.
  3. ViewModifier — Что в действительности делают функции типа foregroundColor, font, padding и т.д.?

Лекция 5 начинается с небольшого демонстрационного «разогрева»- демонстрируется управления доступом (access control) в игре Memorize.

Читать далее

Лекция 4 CS193P Spring 2020 — Grid. Перечисления enum. Optionals.

На Лекции 4 курса Стэнфорда  CS193p — «Developing  Application for iOS» («Разработка приложений для iOS») рассматриваются три чрезвычайно важных темы:

  1. создание пользовательского контейнера Grid и его применение к карточной игре Memorize
  2.  возможности перечислений enum в Swift
  3.  цель применения Optionals

 Начинается Лекция 4 с большого демонстрационного примера, в котором карты в  игре Memorize располагаются по строкам и столбцам вместо того, чтобы располагать их в одной единственной строке. Без сомнения, это не только делает игру намного привлекательнее, но и является очень хорошим примером использования Generics c протоколами protocol, а также функций как ТИПов.

Читать далее

Лекция 2 CS193P Spring 2020 — MVVM и система ТИПов в Swift. Часть 2.

На сайте представлен полный неавторизованный хронометрированный конспект на русском языке Лекции 2 Стэнфордского курса CS193P Spring 2020 “Разработка iOS с помощью SwiftUI ”.

Первая часть — 0 — 38 минута находится здесь,
Вторая часть — 38 — 104 минута находится в этом посте.

Код находится на GitHub.

——————      ПРОДОЛЖЕНИЕ КОНСПЕКТА      —————————

Давайте “выведем” наше приложение Memorize на следующий уровень, используя архитектуру MVVM для того, чтобы дать “мозги” нашей игре. То есть дадим нашей игре некоторую Логику и Данные, которыми являются карты.

——- 38-ая минута лекции ———

Как мы будем это делать?
До сих пор мы работали над кодом, который представлен на экране, и это View.
Если следовать логике MVVM, то мы работали над первым V, которое представляем View, и следующим куском, которому мы уделим внимание, будет Model, то есть первое M.
Model является UI независимой, то есть она ничего не знает о том, как игра будет показана на экране пользователю.

Для Model нам нужно добавить новый Swift файл в Xcode, и мы делаем это с помощью меню File->New->File: Читать далее

Лекция 2 CS193P Spring 2020 — MVVM и система ТИПов в Swift. Часть 1.

На сайте представлен полный неавторизованный хронометрированный конспект на русском языке Лекции 2 Стэнфордского курса CS193P Spring 2020 “Разработка iOS с помощью SwiftUI ”.

Первая часть — 0 — 38 минута находится в этом посте,
Вторая часть — 38 — 104 минута находится здесь .

Код находится на GitHub.

——————      НАЧАЛО КОНСПЕКТА      ——————————————

Добро пожаловать на вторую Лекцию курса Стэнфорда CS193P. Это семестр  Весна 2020 (Spring  2020). Это курс Разработка iOS приложений с помощью SwiftUI. 

Я собираюсь вернуться к демонстрационному примеру, который мы начали на первой Лекции, но сначала я хотел бы рассказать о двух очень важных концептуальных идеях.

Первая из этих идей — MVVM. Это парадигма конструирования, которую мы будем использовать при создании нашего приложения для организации кода.
И вторая вещь, о которой я собираюсь говорить, — это система ТИПов в Swift.

Архитектура

  • MVVM
    • Парадигма конструирования
  • Варианты ТИПов
    • struct — структура 
    • class — класс
    • protocol — протокол
    • “Don’t Care” ТИП (generic) — “Не важно какой” ТИП
    • enum — перечисления
    • functions — функции

Давайте начнем с MVVM.

Архитектура

  • Model-View-ViewModel
    • Архитектурная парадигма конструирования для “организации кода”.
    • Используется в связке с концепцией “реактивного” пользовательского интерфейса.
    • Необходимо соблюдать для работы в SwiftUI.
    • Это отличается от MVC (Model View Controller), который использует UIKit (старый стиль iOS).

MVVM — это модель организации кода. То есть по сути определение мест, где “живет” код вашего приложения. MVVM работает в связке с концепцией “Pеактивного” пользовательского интерфейса, о которой я упоминал в прошлый раз. Необходимо придерживаться MVVM при работе в SwiftUI. Вы не можете работать в SwiftUI без MVVM. Те из вас, кто смотрел предыдущие версии этого CS193P курса для iOS 11должны знать, что MVVM отличается MVC, что является сокращением для Model-View-Controller и используется UIKit, старым механизмом проектирования пользовательского интерфейса в iOS приложениях.

Читать далее

Лекция 1 CS193P Spring 2020 — Логистика курса и Введение в SwiftUI. Часть 2.

На сайте представлен полный неавторизованный хронометрированный конспект на русском языке Лекции 1 Стэнфордского курса CS193P Spring 2020  “Разработка iOS с помощью SwiftUI ”.

Первая часть — 0 — 35 минута находится здесь,
Вторая часть — 35 — 62 минута — находится в этом посте.

Код демонстрационного примера для Лекции 1 находится на Github в папке Memorize L1

——————      ПРОДОЛЖЕНИЕ КОНСПЕКТА      ————————————————- 35 -ая минута лекции ———

Представление о размере в точках points вы можете получить из того, что типичный iPhone имеет 400 — 500 points в ширину и 700 — 800 points в высоту.  iPad имеет размер 1,000 x 700 points.

Я намеренно дал вам приблизительный диапазон экранов устройств в точках points, потому что мы никогда не пишем код, ориентируясь на размеры экранов.

SwiftUI помогает нам писать код, который работает на экранах любого размера, он просто адаптируется и подстраивается под любой размер экрана.  И вы увидите это в действии в нашей игре Memorize, когда у нас появятся строки и столбцы кнопок. На большом экране они будут большими. Когда мы в портретном режиме, они будут иметь один размер, а в ландшафтном режиме — другой. Мы всегда хотим писать код, который будет работать на экранах любых размеров.

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

Я хочу обратить ваше внимание на одну странную вещь. При создании прямоугольника с закругленными углами RoundedRectangle присутствует метка cornerRadius для куска информации, который требуется для его создания:

Она потребовалась только прямоугольнику с закругленными углами RoundedRectangle, для создания Text метка была не нужна, нам не понадобилась метка типа string или ещё что-то подобное. У Text вообще нет меток. 

Но нормой как раз является наличие меток для информации, использующейся для создания. Text — это скорее исключение, когда вообще нет меток для аргументов.

Вам понадобятся некоторые дополнительные ухищрения, чтобы избавится от меток аргументов, и я покажу вам, как этого можно добиться, хотя не будем часто пользоваться этим.

Читать далее