Лекция 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. Часть 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. Часть 1.

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

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

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

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

На Лекции 1 после обсуждения порядка прохождения этого курса в условиях пандемии и беглого обзора среды разработки Xcode 11 и симуляторов, профессор Пол Хэгерти погружается в очень большой и продолжительный демонстрационный пример создания iOS приложения с помощью SwiftUI. А именно карточной игры на совпадение, которой он дал название Memorize

Те из вас, кто смотрел предыдущую версию этого CS193P курса для iOS 11, знают её. Но, конечно, приложение в этом курсе  — это абсолютно новое приложение, полностью написанное на SwiftUI.

Как всегда профессор Пол Хэгерти на протяжении первых 4-х Лекций очень подробно вплоть до объяснения ключевых слов языка программирования Swift и очень тонких нюансов декларативного описания UI рассматривает все концепции, заложенные в SwiftUI. Он медленно, но настойчиво погружает вас в декларативное описание UI, которое проповедует SwiftUI, и которое выполняется с помощью обычных cинтаксических конструкций  языка программирования Swift, языка в первую очередь предназначенного для объектно-ориентированного программирования, а не для функционального программирования. Ему это хорошо удаётся и это очень важно для понимания последующих более сложных конструкций SwiftUI.  

Поэтому для начинающих изучать SwiftUI (а не программирование как таковое) Лекции 1 и 2 являются must have. Но даже если вы опытный разработчик iOS, вы все равно обнаружите в Лекции 1 очень много концептуально нового для себя. В Лекции 2 продолжится демонстрационный пример, начатый на этой Лекции.

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

Добро пожаловать на курс Стэнфорда CS193P. Это семестр Весна 2020 (Spring  2020). Это курс Разработка iOS приложений с помощью SwiftUI.  Я — Пол Хэгерти, и я буду вашим проводником в увлекательном путешествии в Мир разработки приложений для iOS с помощью SwiftUI. В этом семестре это будет необычное приключение, потому что вы не находитесь здесь, в кампусе, вместе со мной, что очень печально. Так что это будет немного странно для всех нас. Но, хотите верьте, хотите — нет, но это не сильно повлияет на наш курс, потому что большая часть наших взаимодействий будет происходить через форум, организованный на Piazza для этого курса. Так что вам определенно нужно попасть на Piazza и задавать там все интересующие вас вопросы, не стесняйтесь. Вы сможете там также задавать вопросы своим однокурсникам и внимательно следите  за тем, что я вам посылаю, потому что все материалы, все объявления будут сделаны через Piazza. Не пропустите эту важную часть взаимодействия.

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

Читать далее

Задание 6 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery с постоянным хранением (persistent). Решение.

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 6: Persistent Image Gallery″. На русском языке вы можете скачать Задание 6 здесь: «Задание VI: Галерея изображений Image Gallery с постоянным хранением (persistent)»

Для решения Задания 6 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 , Лекции 13 и Лекцией 14.

Цель этого Задания 6 — понять  работу FileManager, URL, Codable, UIDocument и UIDocumentBrowserViewController и изучить, как пользоваться iOS API полностью самостоятельно по документации.

Это Задание использует код, который вы создали в Задании 5, но, возможно, вы захотите начать новый Xcode проект “с нуля” (так что вы сможете использовать Document Base App шаблон).

Мое решение обязательных и допонительных пунктов Задания 6 находится на Github  для iOS 11 и на Github для iOS 12:

ImageGallery_6_Requied_OLD — сохранение Модели в файловой системе без UIDocumentBrowserViewController

ImageGallery_6_Requed_Browser— подключение UIDocumentBrowserViewController, но пока присутствует кнопка «Sav

ImageGallery_6_Requed_Browser_No_Save_Button — работает UIDocumentBrowserViewController, но НЕТ кнопки «Save», используется URLCache,

ImageGallery_6_Requed_Browser_No_Save_Button_LocalImage — присутствует UIDocumentBrowserViewController, НЕТ кнопки «Save«, используется URLCache, сохранение изображений, для которых нет URL, производится в локальной файловой системе, документ имеет свой  UTI .imagegallery.

Пункты 1, 2 обязательные

  1. Документы Image Gallery в вашем приложении теперь должны сохраняться постоянно.
  2. Вы можете полностью убрать поддержку таблицы UITableView, добавленную на прошлой неделе.

Приложение Image Gallery — это как раз такое приложение, которое естественно хочется превратить в приложение, основанное на документах, то есть Document based app. Потому что с помощью Image Gallery вы можете создавать тематические живописные Галереи Изображений, и определенно вы захотите их сохранить.

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение дополнительных пунктов.

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь:  Задание 5.pdf

Для решения Задания 5 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 и началом Лекции 13.

Логически выполнение обязательных пунктов Задания 5 распалось на две части: первая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1) обеспечивает работу одной Галереи Изображений Image Gallery и использует исключительно коллекцию Collection View, а вторая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 2.») обеспечивает работу со списком имен Галерей Изображений с помощью таблицы Table View, которая взаимодействует с коллекцией изображений Collection View.

Этот пост мы посвятим оставшимся дополнительным пунктам (Extra Credit) Задания 5.

Мое решение обязательных и дополнительных пунктов Задания 5 находится на Github для iOS 11 и на Github для iOS 12 в папке ImageGallery_V. В разных папках размещен код для нескольких последовательных этапов выполнения Задания 5:

  1. ImageGalleryOnly — работает только коллекция изображений Сollection View
  2. ImageGalleryRequiedTable — работает только таблица имен Table View
  3. ImageGalleryRequiedTwoSeguesSplit View Controller с двумя Segues для разных ПРОТОТИПОВ
  4. ImageGalleryRequiedGenericSegueSplit View Controller с одним Segue и ручным «переездом»
  5. ImageGalleryRequiedNoSegueSplit View Controller без Segue для iPad (обязательные пункты в наиболее комфортном для пользователя исполнении)
  6. ImageGalleryRequiedNoSegueExtra — ОКОНЧАТЕЛЬНЫЙ ВАРИАНТ Задания 5 с обязательными и дополнительными пунктами.

Пункт 1 дополнительный (Extra Credit)

Позвольте пользователям перетаскивать Drag элементы коллекции Collection View в “мусорный бак” (возможно на навигационной панели вверху), что удалит этот URL из Галереи изображений (Image Gallery).

Идея того, как это можно сделать, заключается в следующем.

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 2.

Содержание

В Задании 5 вы должны освоить работу с Table View, Collection View, Scroll View и Text Fields, понять, как работает многопоточность (multithreading) и механизма Drag & Drop

Разработка Задания 5 начинается “с нуля”. Оно не имеет отношения к первым 4-м Заданиям этого семестра.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь: Задание 5.pdf.

Для решения Задания 5 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 и началом Лекции 13.

Центральной частью этого Задания 5 является коллекция изображений Collection View, которая моделирует Галерею Изображений Image Gallery. Необходимо обеспечить ее работоспособность, настроить ее параметры для отображения изображений в удобной и визуально привлекательной форме, подключить определенные жесты для операций над ее элементами, а также наделить ее механизмом Drag & Drop, который позволит добавлять изображения из других приложений, например, поисковой системы Google, и избавляться от ненужных элементов, кидая их в «Мусорный контейнер». В приложении предполагается создание целой серии таких тематических Галерей Изображений, каждой из которых будет дано имя, а список имен всех Галерей размещен в таблице Table View, которую тоже можно будет редактировать.

Логически выполнение обязательных пунктов Задания 5 распадается на две части: первая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1.») будет обеспечивать работу одной Галереи Изображений Image Gallery и будет использовать исключительно коллекцию Collection View, а вторая часть будет обеспечивать работу со списком имен Галерей Изображений с помощью таблицы Table View, функционирование которой мы отработаем отдельно, а затем подстыкуем к ней коллекцию Collection View, уже настроенную под Галерею изображений Image Gallery.

Вторая часть будет представлена в этом посте.

Мое решение обязательных пунктов Задания 5 находится на Github для iOS 11 и на Github для iOS 12  в папке ImageGallery_V. Задание очень большое и сложное, поэтому я разместила код для нескольких последовательных этапов его выполнения, что позволит вам проверять ваш код на разных стадиях выполнения Задания 5:

  1. ImageGalleryOnly — работает только коллекция изображений Сollection View
  2. ImageGalleryRequiedTable — работает только таблица имен Table View
  3. ImageGalleryRequiedTwoSeguesSplit View Controller с двумя Segues для разных ПРОТОТИПОВ
  4. ImageGalleryRequiedGenericSegueSplit View Controller с одним Segue и ручным «переездом»
  5. ImageGalleryRequiedNoSegueSplit View Controller без Segue для iPad (наиболее комфортный для пользователя), это ОКОНЧАТЕЛЬНЫЙ ВАРИАНТ выполнения обязательных пунктов Задания 5.

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1.

Содержание

В этом Задании вы должны освоить работу с Table View, Collection View, Scroll View и Text Fields, понять, как работает многопоточность (multithreading). 

Разработка этого Задания начинается “с нуля”. Оно не имеет отношения к первым 4-м Заданиям этого семестра.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь: Задание 5.pdf.

Для решения Задания 5 необходимо ознакомиться с Лекцией 11Лекцией 12 и началом Лекции 13.

Мое решение Задания 5 находится на Github для iOS 11 и на Github для iOS 12 в папке ImageGallery_V. Для этого поста это вариант ImageGalleryOnly.

Центральной частью этого Задания 5 является коллекция изображений Collection View, которая моделирует Галерею Изображений Image Gallery. Необходимо обеспечить ее работоспособность, настроить ее параметры для отображения изображений в удобной и визуально привлекательной форме, подключить определенные жесты для операций над ее элементами, а также наделить ее механизмом Drag & Drop, который позволит добавлять изображения из других приложений, например, поисковой системы Google, и избавляться от ненужных элементов, кидая их в «Мусорный контейнер». В приложении предполагается создание целой серии таких тематических Галерей Изображений, каждой из которых будет дано имя, а список имен всех Галерей размещен в таблице Table View, которую тоже можно будет редактировать.

Логически выполнение обязательных пунктов Задания 5 распадается на две части: первая часть ( ей посвящен этот пост) будет обеспечивать работу одной Галереи Изображений Image Gallery и будет использовать исключительно коллекцию Collection View, а вторая часть будет обеспечивать работу со списком имен Галерей Изображений с помощью таблицы Table View, функционирование которой мы отработаем отдельно, а затем подстыкуем к ней коллекцию Collection View, уже настроенную под Галерею изображений Image Gallery.

Вторая часть будет представлена в следующем посте.

Читать далее

Лекция 17 CS193P Fall 2017 — Core Motion & Camera.

Лекция 17 посвящена некоторых специфических API доступа к оборудованию (hardware) нашего устройства. Рассматриваются два API: это Core Motion, отвечающее, главным образом, за определение местоположения устройства в пространстве в процессе перемещения устройства, и Фотокамера (Camera), с помощью которой мы можем сделать фотографию и/или видео и разместить их в своем приложении.

Итак, CoreMotion — это объектно-ориентированное API для доступа к первичным датчикам движения на вашем устройстве. Core Motion поставляет в приложение данные первичных датчиков Apple приборов: акселерометра (accelerometer), гироскопа (gyro) и магнитометра (magnetometer).

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

Датчики движения в iOS — удивительный механизм. И надо отдать должное инженерам Apple — подключение датчиков к приложению является предельно простым, а их дальнейшее использование не ограничивает вас ни в чём. Как и все приложения, дополненные реальностью, они захватывают в первую очередь тем, что дают вам в руки инструмент для преобразования информации об окружающем вас мире в виртуальный мир вашего телефона. Профессор показывает  демонстрационный пример игры в карты Playing Cards, дополняя ее элементами реального Мира, а именно реальным ускорением свободного падения, полученным с акселерометра. Эти показания датчика движения нашего устройства (iPhone или iPad) «подцепляются» к «поведению» гравитации UIGravityBehavior, действующему в динамическом аниматоре Dynamic Animator.  Читать далее

Лекция 16 CS193P Fall 2017 — Еще больше Segues.

Вся Лекция 16 посвящена Segues. Мы уже изучили на прошлых Лекциях Show segue и Show Detail segue, которые работают в Navigation Controllers и Split View Controllers.

На Лекции 16 изучаются все оставшиеся типы Segues: Modal, Unwind, Popover, Emded.

Сначала излагается теоретическая часть по каждому виду Segue, а затем для этого вида Segue следует небольшой демонстрационный пример, показывающий Segue в действии. В результате у профессора формируется блестящий демонстрационный пример, в котором несмотря на различия Segues — Modal и Popover адаптируют свое представление на iPhone, а функционирование Emded вообще не зависит от платформы, все Segues создают новые MVCs,  а Unwind — нет, —  все они работают «бок о бок» в одном приложении и даже разделяют код.

Читать далее

Лекция 14 CS193P Fall 2017 — Еще о Documents, Демонстрационный пример Persistence (постоянное хранение) и Documents.

Лекция 14 состоит из двух неравных частей :

  • первая меньшая часть является продолжением теоретической части, связанной с UIDocument и начатой на Лекции 13. Она посвящена UIDocumentBrowserViewController , прекрасному и очень мощному интерфейсу в вашем собственном приложении для создания файлов, перемещения файлов, удаления файлов, размещения их в папках, перетаскивания файлов с iCloud Drive на локальный жесткий диск.
  • вторая  часть — это огромный демонстрационный пример, охватывающий тему постоянного хранению (persistence) и тему создания приложений, ориентированных на работу с документами, на основе UIDocument и браузера документов UIDocumentBrowserViewController.

Читать далее