Лекция 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, а также функций как ТИПов.

Читать далее

Лекция 3 CS193P Spring 2020 — Reactive UI. Protocols. Layout.

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

  1. Реактивный пользовательский интерфейс (UI).
  2. Протоколы protocol и их комбинация с Generic — мощная сила в Swift.
  3. Система Layout (управление расположением Views) в SwiftUI.

На предыдущей Лекции 2 мы познакомились теоретически и практически с MVVM как архитектурной парадигмой “организации кода”. 

У MVVM много общего с MVC, и основное состоит в том, что и в том, и в другом случае мы пытается отделить Model, которая является бэкендом нашего приложения, от View, которое предстает непосредственно перед пользователем. Обе архитектуры пытаются сделать Model UI НЕзависимой.

Но Views в SwiftUI являются «реактивными». Что имеется в виду под “реактивным”? Когда происходят изменения в Model, они  мгновенно АВТОМАТИЧЕСКИ отображаются во View. 

Для того, чтобы это происходило, нам понадобится в шаблоне MVVM помимо Model и View, ещё один компонент с именем ViewModel. Работа ViewModel состоит в том, чтобы “привязать” (bindView к Model. Как только происходят хоть какие-то изменения в Model, View тут же отражает эти изменения.

Читать далее

Лекция 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 — это скорее исключение, когда вообще нет меток для аргументов.

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

Читать далее

Лекция 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. Не пропустите эту важную часть взаимодействия.

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

Читать далее

Новый стэнфордский курс CS193P «Разработка iOS приложений с использованием SwiftUI» Весна 2020г. начали выкладывать.

Стэнфордский курс CS193p — «Developing  Application for iOS using SwiftUI.» («Разработка приложений для iOS с применением SwiftUI.»),  прочитанный в весеннем семестре 2020 года (Spring 2020)  студентам Стэнфорда в формате on-line из-за новой пандемии коронавируса, начали  выкладывая по две Лекции в неделю. Следите за этим здесь.

 

SwiftUI для конкурсного задания Telegram Charts (март 2019 года). Часть 2.

Это вторая часть поста, посвященного использованию SwiftUI для решения предыдущего конкурса Telegram Charts (март 2019).

Первая часть, в которой сформулирована сама задача и описаны отдельные элементы UI для отображения одного «набора Графиков»,  представлена здесь. В этом посте мы займемся комбинированием этих частей сначала для создания ChartView для одного «набора Графиков», а затем для комбинации различных ChartView для множества «набора Графиков».

Комбинирование различных Views

SwiftUI — это прежде всего комбинирование различных маленьких Views в большие, а больших Views — в очень большие и т.д., как в игре Lego. В SwiftUI есть множество средств такого комбинирования Views:

  • вертикальный стек VStack,
  • горизонтальный стек HStack,
  • «глубинный» стек ZStack,
  • группа Group,
  • ScrollView,
  • список List,
  • форма Form,
  • контейнер с «закладками» TabView
  • и т.д.

Начнем наше комбинирование с самого простейшего GraphsViewForChart, который наделяет «безликий» «набор Графиков» GraphsForChart осью Y и индикатором, перемещающимся по оси X, с помощью «глубинного» стек ZStack: Читать далее

SwiftUI для конкурсного задания Telegram Charts (март 2019 года). Часть 1.

Сразу начну с замечания о том, что приложение, о котором пойдет речь в этой статье, требует Xcode 11 и MacOS Catalina (в настоящий момент последняя находятся в Beta 9). Код приложения находится на Github.

В этом году на WWDC 2019, Apple анонсировала SwiftUI, новый способ построения пользовательского интерфейса (UI) на всех устройствах Apple. Это практически полное отступление от привычного нам UIKit, и я — как и многие другие iOS разработчики — очень хотела посмотреть этот новый инструмент в действии.

Очень много было написано о SwifUI за последние три месяца, начиная с Xcode 11 beta 1 и до  нынешней версии Xcode 11.0. Этот пост вовсе не имеет целью дать какое-то масштабное введение в SwiftUI. Это просто опыт решение некоторой задачи, которую не удается в рамках UIKit удовлетворительно решить (представить код в читабельном виде).

Задача связана с конкурсом, объявленным Telegram для Android, iOS and JS разработчиков, который  проходил в период 10 — 24 марта 2019 года.  В этом конкурсе была предложена простая задача графического отображения интенсивности использования некоторого ресурса в интернете от времени на основе JSON данных.

Читать далее

Только что прочитанный курс CS193P Весна 2019 не будет выложен в iTunes для публичного доступа.

5 июня 2019 года профессор Пол Хэгерти закончил читать очередной Стэнфордский курс CS193P «Разработка iOS приложений» Весна 2019 для Swift 5 и iOS 12, но на этот раз, со слов самого профессора, ни команда iTunes, ни Apple не проявили интереса к тому, чтобы записать этот курс на видео, и он не будет выложен в iTunes для публичного изучения. Хотя, конечно, курс CS193P Весна 2019 записывался на видео непосредственно командой Стэнфорда и был доступен исключительно студентам Стэнфорда.

После того, как с 3 по 8 июня 2019 года прошла конференция разработчиков Apple WWDC 2019, стало приблизительно понятно, почему  это произошло с курсом CS193P «Разработка iOS приложений» Весна 2019.

Во-первых, на конференции разработчиков Apple предложила ряд абсолютно новых технологий разработки iOS (а также watchOS, tvOS и MacOS) приложений, и это прежде всего разработка пользовательского интерфейса (UI) на языке Swift 5.1 с использованием фреймворков SwiftUI и Combine, совершенно новая операционная система iPadOs, а также возможность адаптировать iPad-приложения на MacOS с помощью Catalyst.

iPadOS основана на тех же принципах, что и iOS, но её уникальные возможности просто поражают.

Проект Catalyst для новой операционной системы macOS 10.15 Catalina — это ранее известный проект под кодовым названием «Marzipan». И это тоже совершенно новый способ портировать iPad-приложения на Mac.

Так что Apple предлагает разработчикам приложений на своих устройствах совершенно новые супер современные подходы. Профессору Полу Хэгерти придется разрабатывать совершенно новый курс  CS193P «Разработка iOS (iPadOS??) приложений». Впрочем, он всегда это делает очень оперативно и эффективно. Вспомним хотя бы, как он оперативно рискнул перейти от Objective-C на самую первую версию Swift 1.0 (конечно, сильно сырую в то время) и самым первым выпустил обучающий курс «Разработка iOS приложений на Swift«. Надеюсь, так же будет и на этот раз, и мы в начале 2020 года увидим новый адаптированный к новым реалиям курс CS193P «Разработка iOS (iPadOS??) приложений». Но пока на сайте Stanford‘а нет расписания на 2020 год.

Во-вторых, еще одно новшество, объявленное Apple на конференции разработчиков  WWDC 2019 для новой операционной системы macOS 10.15 Catalina , — это разделение приложения iTunes, в котором профессор Пол Хэгерти размещал материалы своего курса для скачивания, на 3 отдельных приложения: Apple Music — для музыки, Apple TV — для TV и фильмов и Apple Podcasts — для подкастов, где собственно и находятся материалы для курса CS193P «Разработка iOS 11 приложений» Осень 2017 и могут быть скачаны:

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

Пока профессор создает свой новый курс CS193P, стоит подготовиться к разработке iOS приложений с помощью очень интересного фреймворка  SwiftUI. В связи с этим я планирую разместить на этом сайте ряд уроков по SwiftUI, которые направлены на разработку приложения, отображающего информацию о пользователях некоторого ресурса, полученную в JSON формате, в виде временных графиков. Это было конкурсное задание Telegram, и я покажу, как просто оно решается с помощью SwiftUI.

В ближайшие пару дней выложу это, пока еще не конца реализованное, но уже прилично работающее, приложение на Github.