Лекция 16 CS193P Winter 2017 — Alerts (экстренные сообщения) и Action Sheets (списки действий), Notifications (уведомления), Application Lifecycle («жизненный цикл» приложения) и Persistence (постоянное хранение).

В Лекции 16 освещаются разнообразные темы:

  • Экстренные сообщения Alerts и списки действий Action Sheets
  • Уведомления Notifications
  • “Жизненный цикл” приложения (UIApplication, AppDelegate, Info.plist, Capabilities)
  • Постоянное хранение Persistence

Alerts (экстренные уведомления) и Action Sheets (списки действий)

В iOS существуют два типа механизмов, которые позволяют с помощью “всплывающего окна” что-то спросить у пользователя. Один называется Alert  (экстренное сообщение), а другой — Action Sheets (список действий).

Они используют один и тот же API. Имеется некоторая разница между этими двумя механизмами. Наиболее легкий способ увидеть разницу между Alert и Action Sheets — это посмотреть пример, представленный на слайдах. В качестве такого примера Пол Хагерти взял уже знакомое нам приложение Cassini и на нем продемонстрировал все возможности Alert и Action Sheets. Особое внимание уделяется появлению Action Sheets в Popover «окошке» как на iPhone, так и на iPad. Профессор показывает демонстрационный пример использования экстренных сообщений Alert с текстовым полем внутри для нашего старого товарища — приложения FaceIt.

Читать далее

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

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

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

Сначала излагается теоретическая часть по всем этим видам segue, а затем следует очень большой демонстрационный пример, показывающий все 4 вида segues в действии.

Читать далее

Лекция 11 CS193P Winter 2017 — Core Data Demo (Демонстрационное приложение).

Лекция 11 посвящена демонстрационному примеру «L11 Smashtag« с использованием Core Data. Этот пример построен на основе приложения  «L9 Smashtag«, которое по существу является клиентом Twitter, выбирающем твиты по специальной строке поиска типа #stanford. Он демонстрирует все теоретические положения Core Data, представленные на Лекции 10.

Задачей демонстрационного приложения  «L11 Smashtag« является показ списка всех пользователей Twitter, у которого есть твиты, содержащие в тексте поисковую строку, например,  #stanford . Должны быть учтены не только твиты, полученные из Twitter в результате последнего поиска  для строки #stanford, но и вообще все твиты, когда-либо связанные с поиском по строке #stanford. Для этого используется база данных Core Data. Каждый раз при получении твитов «из сети» с помощью специального фреймворка Twitter c Лекции 9, они не только показываются на экране, но и записываются в Core Data. Потом мы сможем запрашивать эти твиты и получать любую информацию, включая получение списка пользователей, которые имели твиты с текстом, содержащим, например, #stanford.

Подробно демонстрируются все этапы создания приложения с Core Data:

Читать далее

Лекция 10 CS193P Winter 2017 — Core Data (Объектно-ориентированная база данных).

В начале Лекции 10 в догонку темы Table View и предыдущей Лекции 9, профессор показывает очень интересный способ работы с Refresh Control для добавления «свежих» твитов в отдельные секции таблицы. Кроме того предлагается сделать запрос к Twitter более безопасным и c фильтром на ретвиты:
 Twitter.Request(search: «\(query) -filter:safe -filter:retweets»,count: 100)
Остальная и большая часть Лекции 10 целиком теоретическая и посвящена одной единственной теме — Core Data. По существу, это способ создания графа объектов, который проектируется на SQL или XML базы данных  или даже на базу данных в памяти.
В iOS 10 Apple представила одну из самых значительных модернизаций Core Data со времен iOS 5. Во главе нового Core Data теперь стоит класс NSPersistenceContainer.  Он снабжает вас очень простым  API: контекстом viewContext, работающим на main queue, и методом  performBackgroundTask(_:) , для выполнения Core Data задач в фоновом (background) режиме.

Читать далее

Лекция 9 CS193P Winter 2017 — Table View (табличное представление данных).

Вся Лекция 9 посвящена единственной и очень важной теме — визуальной таблице Table View, которая является  в iOS основным способом отображения и взаимодействия с большими наборами данных. Таблица Table View изначально настроена на отображение очень большого объема данных (сотни тысяч и более строк) и использует эффективный механизм формирования очереди повторно используемых ячеек (Dequeue Reusable Cell) и делегирование dataSource для загрузки динамических данных. Помимо ДИНАМИЧЕСКИХ таблиц  профессор рассказывает и демонстрирует возможности СТАТИЧЕСКИХ таблиц, больше пригодных для всевозможного рода настроек (Settings).

Первая часть Лекции 9 представляет целый спектр проблем, связанных как со структурой и составными частями Table View, так и с использованием подкачки данных в таблицу из интернета в многопоточной среде. В условиях, когда ячейки в таблице Table View «уходят» и «приходят» на экран, а также повторно используются в целях эффективности, законы «Мира многопоточности» проявляют себя в полную силу. Пол Хэгерти показывает две вещи, которые вы все должны учитывать в условиях многопоточности.

Читать далее

Лекция 8 CS193P Winter 2017 — Multithreading и Text Field (Многопоточность и текстовые поля)

Судя по названию, основными темами Лекции 8 являются:

  1. Многопоточность,
  2. Текстовые поля,

но очень значительная часть Лекции 8 посвящена также усовершенствованию функциональных возможностей демонстрационного приложения Cassini по следующим направлениям :

  • использование множественного MVC Split View Controller в сочетании с парой Navigation Controllers для обеспечения функционирования на iPhone и iPad
  • применение extension для расширения возможностей класса UIViewController
  • тонкости использования индикатора активности  (Activity Indicator) в виде маленького вращающегося «колесика» для визуализации занятости системы
  • использование делегата UISplitViewController для управления появлением Detail или Master

В результате получился универсальный, подходящий на все случаи жизни, как в дальнейшем покажет практика, MVC для показа изображений по их URL —  ImageViewController. Огромный объем изображений NASA, задействованных в демонстрационном приложении Cassini , наглядно показывает необходимость использования многопоточности.
Читать далее

Лекция 7 CS193P Winter 2017 — Обработка ошибок, Extensions, Протоколы, Делегирование и Scroll View.

В Лекции 7 рассматривается ряд важных тем :

  • Обработка ошибок в Swift
  • Расширения
  • Протоколы
  • Делегирование
  • Scroll View

Проектировщики языка Swift действительно усвоили уроки некоторых других языков программирования, в которых режим обработки ошибок слишком усложнен, поэтому Swift использует очень простой механизм для обработки ошибок. Рассматриваются методы с ключевым словом throws в конце декларирования, операторы try, try! и try?,  а также обработка ошибок с помощью блока do { } catch let error { }.

Далее следует рассказ о синтаксической возможности в Swift, которая называется extension (расширение). Расширение extension позволяет добавлять методы и свойства в другие классы, даже если у вас нет исходного кода этих  классов. Пол Хэгерти демонстрирует очень прагматичный пример использования extension для класса UIViewController, которое упрощает использование  Navigation Controller в Split View Controller. Далее он также будет использовать extension для подтверждения и реализации протокола UIScrollViewDelegate.

Читать далее

Лекция 4 CS193P Winter 2017 — Views.

Лекция 4  полностью посвящена ViewsViews — это прямоугольные области на экране, в которых мы рисуем и получаем от пользователя так называемые “жесты прикосновения” (touch gestures), как одинарные, так и множественные. Но на Лекции 4 ведется разговор только о рисовании, управление жестами перенесено в Лекцию 5. Никогда раньше в своих курсах Пол Хэгарти не уделял столько внимания рисованию Views. Возможно, это связано с тем, что компактность кода и богатство синтаксических конструкций Swift позволяют представить рисование как увлекательный и очень интеллектуальный процесс.

Читать далее

Лекция 3 CS193P Winter 2017 — Больше Swift и Фреймворк Foundation.

Хотя название Лекции 3 этого курса  «Developing  iOS 10 Apps with Swift» совпадает с названием Лекции 3 курса «Developing iOS 9 Apps with Swift» на этой Лекции очень отчетливо видно, что профессор Пол Хэгерти сделал небольшой разворот всего курса от ОБЪЕКТНО-ОРИЕНТИРОВАННОГО программирования, которое напоминает “Дикий Запад” с объектами, на которые указывает множество людей, к ФУНКЦИОНАЛЬНОМУ программированию с множеством неизменяемых объектов с APIs похожими на математические функции.

Конечно, iOS вовсе не была сконструирована на основе идеи функционального программирования. Но люди, которые изобретали Swift, держали “в голове” идею о функциональном программировании. Так что при разработке вашего iOS приложения (по крайней мере в части Модели) вы можете использовать множество элементов функционального программирования.

Это новый рубеж в iOS программировании, потому что в течение 20 -30 лет люди в основном использовали в iOS программировании только reference type объекты, имея в виду концепцию объектно-ориентированного программирования. Но когда вы программируете с помощью структур structs и перечислений enums, и особенно если вы подключаете механизмы протоколов Protocols (рассматриваются позже) и Generics, то вы можете реально сделать прекрасную работу, имеющую дело с реальным функциональным программированием.

И хотя темы в Лекции 3 нового курса примерно те же, акценты расставлены совсем по-другому. Теперь на первом месте value types, а о reference types — лишь мимоходом, подробно о структурах structs и перечислениях enums,  а о классах classes — лишь мимолетом. Очень подробно о диапазонах Range<T> и о том, при каких условиях Range<T> становится последовательностью Sequence и позволяет применять к себе синтаксическую конструкцию for in. Кстати, единственный оставшийся в Swift оператор for.

Читать далее

Лекция 2 CS193P Winter 2017 — MVC; Демонстрация iOS 10, Xcode 8 и Swift 3.

На Лекции 2 профессор подробно с картинками объясняет использование паттерна MVC для разработки iOS приложений.

Затем следует продолжение демонстрационного приложения Калькулятор, начатого на прошлой лекции. Происходит разделение кода Модели и кода, обслуживающего View Controller. Появляется новая структура struct CalculatorBrain, которая представляет лагерь Модель. Возможно вы привыкли использовать структуры struct в других языках и думаете о них, как о маленькой коллекции других переменных. В Swift структура struct — это “гражданин” первого класса, очень похожий на класс class. У класса class и структуры  struct много отличий, но самых главных два:

  1. Классы classes имеют наследование (inheritance), а структуры structs — нет.
  2. Классы classes ”живут” в “куче”, и у вас есть на них указатели.  Классы classes используют стиль передачи по ссылке reference types. Структуры structs НЕ ”живут” в “куче” и передаются повсюду путем их копирования (точнее с использованием механизма copy-on-write). Мы называем этот стиль передачи value types.

Профессор показывает, как проектировать Модель с использованием структуры struct CalculatorBrain, отталкиваясь от  public API Модели,  как добиться расширяемой функциональности в структурах struct, ведь мы не можем использовать создание subclass, как в классе class. Показано создание вложенных структур  struct и перечислений enum. На очень коротких фрагментах кода объясняется, когда стоит применять Optional, а когда — нет, исходя из семантического содержания Optional. Очень подробно рассказывается о перечислениях enum и о том, что Optionals также являются enum. Оба имеют ассоциированные значения, но в случае с enum они  могут быть любыми, в том числе и замыканиями (closure).

Читать далее