Лекция 7 CS193P Winter 2015 — Множественные MVC (Split View, Tab Bar, Navigation Controller и Popover)

Лекция 7 продолжает тему множественных MVC, начатую в конце лекции 6. Очень подробно рассматриваются принципы функционирования Navigation Controller, который помимо основных функциональных возможностей, является адаптивной версией Split View для iPhone.

Связи между MVC осуществляются segues. Они всегда создают новый экземпляр вызываемого MVC и нуждаются в инициализации этого MVC, например, с использованием метода prepareForSegue. В лекции рассматриваются все типы  segues.

Далее в лекции приводится большой демонстрационный пример Psychologist, в котором показывается создание адаптивного Split View как для iPad, так и для iPhone. Дан шаблон универсального кода для метода prepareForSegue в этом случае. Приводится пример выполнения segue в коде. Конечно, у Пола Хэгерти в курсе cs193p Winter 2015 ни один демонстрационный пример не обходится без применения Autolayout, и этот пример не исключение: вы узнаете новые приемы работы с Autolayout.

Читать далее

Лекция 6 CS193P Winter 2015 — Протоколы и делегирование, распознавание жестов

Пол Хэгерти начинает Лекцию 6 с небольшой демонстрации великолепных возможностей Xcode по работы с пользовательскими UIViews: @IBDesignable и  @IBInspectable. Затем добавляется Модель в MVC, разработка которого началась на прошлой лекции.

Extensions 

Далее рассматривается такая концепция Swift как extensions (расширения). Пол Хэгерти подчеркивает, что рассказывает об extensions не потому, что это очень важная возможность Swift, а потому что это немного опасная возможность Swift. Реализация extensions в Swift очень простая. Совсем чуть-чуть синтаксиса для добавления методов и свойств к существующим classesstructures и enums. Вам не нужно даже иметь код этой вещи, к которой вы хотите добавлять расширения. Вы можете добавлять столько методов и свойств, сколько хотите. Именно простота синтаксиса может привести к злоупотреблениям применения этой концепции.

Протоколы и делегирование

Пол Хэгерти рассказывает о том, что Swift имеет очень любопытный синтаксис для протоколов. Затем следует  подробная теория протоколов и делегирования, излагаемая на слайдах. Четко очерчивается процедура разработки делегирования как со стороны того, кто (обычно View) делегирует свою ответственность другим, так и со стороны того, кто берет на себя роль делегата (по обстоятельствам может быть и View, и Controller). Простота Модели в очень подробном демонстрационном примере приводит к такому понятному изложению сложной для понимания концепции делегирования, что удобно держать этот замечательный пример как прототип для проектирования делегирования в любых других сложных обстоятельствах.

Жесты 

Рассказывается  как нужно работать с самыми разными жестами: pinch (стягивание), pan (движение по экрану), rotation (вращение), swipe  (смахивание), tap (стук) и в разных условиях: на storyboard  и в коде. Большое внимание уделяется как распознаванию различных жестов, так и их обработки как в случае управления экранно-зависимыми элементами UI, так и Моделью.

Демонстрационный пример показывает работу с двумя совершенно различными жестами :  pinch и panОдин — с двумя пальцами, другой — с одним. Один жест мы добавили на storyboard, а другой — в коде. Один обрабатывает наш Controller, а другой —  наш View. Система IOS великолепно определяет разницу между жестами, когда один сменяет другой.

В конце лекции Пол Хэгерти переходит к большой теме «Множество MVC«, которая будет продолжена на Лекции 7.

Лекция и слайды на английском языке iTunes название “6. Protocols and Delegation, Gestures”.  Код Демо «Happiness»  для Swift 1.2 доступен на сайте  Stanford.  Код демонстрационного примера  «Happiness» для Swift 2.0 доступен на Github.

Русский неавторизованный конспект лекции 6, хронометрированный через каждые 5 минут, представлен в PDF — файлах.

Лекция 6 CS193P Winter 2015 iOS 8 1.pdf

Лекция 6 CS193P Winter 2015 iOS 8 2.pdf

Лекция 6 CS193P Winter 2015 iOS 8 3.pdf

Лекция 5 CS193P Winter 2015 — Objective-C совместимость, Property List , Views

Пол Хэгерти начинает Лекцию 5 начинается с теории о том, как создавался Swift, чтобы его работа с  Objective-C API была максимально комфортна, и таким образом обеспечивала бы взаимозаменяемость ( bridging ) NS — объектов старого мира с новыми «родными» Swift типами в большинстве iOS методов.
Рассматриваются особенности явного «кастинга» с использованием  as и as?

Property List

Интерпретируя Property Lists как коллекцию AnyObjects, Пол Хэгерти рассматривает использование механизма NSUserDefaults в Swift для хранения информации об «установках» (settings) и параметров предварительной настройки (preferences) между запусками приложения.
Далее следует короткий Демонстрационный пример использования  Property List для приложения Calculator.

Views

Иерархичность views, superview, subviews и связанные с ними системы координат.
Способы инициализации views взависимости от того, где они создаются: в коде или на storyboard.
«Раняя» установка некоторых свойств с помощью awakeFromNib
Views используют специальные структуры данных для рисования: points (точки), sizes (размеры) и  rectangles (прямоугольники), и множество удобных методов для работы с ними. Дается четкое различие между frame и  bounds.  Вводится понятие единицы измерения points с различным числом пикселей в зависимости от используемого прибора и соответствующее свойство contentScaleFactor.

Custom Views

Рисование в  drawRect. Core Graphics и UIBezierPath. Рисование фигур, прием «вырезание» с использованием addClip()
Управление цветами происходит с помощью класса UIColor, который позволяет устанавливать прозрачность (transparency) с помощью значения  alpha. «Скрытие» view, не убирая его из иерархии.
«Рисование» текста в drawRec с помощью строки с атрибутами NSAttributedString.
Фонты для пользовательского контента preferredFontForTextStyle.
«Рисование» изображения (image) в drawRec с помощью UIImage(name:).
UIViewContentMode определяет, что будет происходить при изменении  bounds вашего view.
В конце лекции демонстрационный пример иллюстрирует все теоретические части лекции.

Лекции и слайды на английском языке представлены в iTunes название “5. Objective-C Compatibility, Property List, Views”.  Код Демо «Happiness» для Swift 1.2 доступен на сайте Stanford. Код демонстрационного примера «Happiness» для Swift 2.0 доступен на Github.

Русский неавторизованный конспект лекции 5, хронометрированный через каждые 5 минут, представлен в PDF — файле

Лекция 5 CS193P Winter 2015 iOS 8 All.pdf

 

Задание 2 cs193p Winter 2015 Умный Калькулятор

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 2″.  Текст Домашнего задания на русском  языке доступен на 

Задание 2 iOS 8_new.pdf

 Задание 2 — очень трудное, но выполнимое. Если вам удастся выполнить его так, как планировал Пол Хэгерти, то есть в соответствии с логикой Swift, а не логикой того языка программирования (C++, C#, Java, Python и т.д.), с которого вы пришли, то можете считать себя «гуру» в Swift и представлять, что вы стоите на «Эвересте» и «снисходительно» смотрите на остальных. Что я имею ввиду под логикой Swift, которую так изобретательно использует Пол Хэгерти? Если вы смотрели предыдущий его курс по iOS 7, то там он в буквальном смысле «жонглирует» nil, чтобы ваш код из одной строчки  выполнял кучу работы. То же самое здесь, он будет также хитроумно использовать Optionals. Почти в каждом пункте Задания 2 он призывает рассмотреть вариант решения, состоящий из одной — двух строк. Помимо этого, Задание 2 содержит множество подсказок, которые помогут вам почувствовать «дух»  Swift.

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

Результаты выполнения заданий можно посылать на форум Swift[ru] для обсуждения. Выкладывайте решения в Github или давайте ссылку на Dropbox или используйте другие системы управления версиями. Xcode  работает напрямую с Github. Если у кого-то есть затруднения с этим — обращайтесь на форум, проведем ускоренный курс по выкладывание кода на Github. Если состоится обсуждение ( пока этого на форуме почти нет совсем) — будет интересно.

Специально привела возможное решение Задания 1 ( у вас может быть лучше), чтобы каждый, кто даже «застрял» по какой-то причине,  мог «приступить к выполнению Задания 2.

Рекомендации изучающим курс cs193p iOS 8

Я разместила Stanford CS 193P iOS 7 Лекция 11 —  UITableView и iPad (UISplitViewController, Popover)  на этом сайте. В ней описывается работа c  TableView, с refresh control и т.д. Но самое главное — в ней показан пример создания универсального приложения  для iPhone и iPad. Пользовательский интерфейс строится на двух отдельных storyboards: одна для iPhone с использованием TableViewController и NavigationСontroller, другая — для iPad с использованием TableViewController и UISplitViewController.

В iOS 8 мы больше этого не увидим, у нас будет одна универсальная (а точнее адаптивная) storyboard с универсальным и довольно сложным UISplitViewController. Для того, чтобы понять, как работает этот универсальный  UISplitViewController в iOS 8, нужно знать, откуда он такой взялся, и почему был сделан именно так.  У вас есть возможность подступиться к изучению нового сложного  адаптивного UISplitViewController в iOS 8 через изучение более простого варианта UISplitViewController на iOS 7, который Пол Хэгерти очень подробно и обстоятельно описывает и  демонстрирует на примере просмотра фотографий с Flickr. Кстати, теоретическая часть, описывающая UISplitViewController на iOS 7,  рассказывается на пример Графического Калькулятора, который нам предстоит создать на iOS 8 в Задании 3 или 4.

Методы делегата UISplitViewController считались самыми трудоемкими и обременительными во всем iOS 7,  но они — «цветочки» по сравнению с методами делегата нового UISplitViewController в iOS 8 в контексте адаптивной философии (size classesTraitCollection). У вас появилась возможность заранее подготовиться к их изучению.

Лекция 4 CS193P Winter 2015 — Больше Swift и Foundation Frameworks. (часть 2. AnyObject, as?, is, String.Index)

Title iOS 8

STANFORD UNIVERSITY: Разработка iOS 8 приложений с Swift CS193P

 Лекция 4: Больше Swift и Foundation Frameworks

Профессор Пол Хэгарти (Paul Hegarty)

Лекцию на английском языке и слайды можно найти на  iTunes название  “4. More Swift and Foundation Frameworks”.

Русскоязычный неавторизованный конспект лекций принадлежит сайту bestkora.com/IosDeveloper

Начало: 1 — ая часть лекции (0 — 37 минут) находится здесь.
Этот документ:  продолжение: 2 — ая часть лекции (37 минута — конец ) 

Примечание переводчика. В документе почти каждый слайд точно переводится на русский язык. Текст перевода располагается между двумя горизонтальными линиями сразу вслед за слайдом. Далее следует речь профессора, который повторяет то, что изображено на слайдах, а иногда и сам повторяет одну и ту же мысль в разных вариантах. Этот документ содержит живую речь и не подвергался глубокому редактированию. 

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

Давайте поговорим о наследовании init. Потому что это также сложно. Ниже представлены правила при наследовании  init.

Screen Shot 2015-02-15 at 6.16.20 PM


Инициализация

  • Наследование init.

Если  вы не реализуете никакие назначенные inits, то вы унаследуете все назначенные inits вашего superclass
Если  вы переопределите (override)  все назначенные inits вашего superclass, то вы унаследуете все convenience inits вашего superclass
Если  вы не реализуете ни одного  inits в, то вы унаследуете все  inits вашего superclass
Любой  inits, унаследованный по этим правилам, должен удовлетворять всем правилам на предыдущем слайде

  • Required init.

Класс может пометить один или более  init методов как required
Любой subclass должен реализовать эти упомянутые методы ( даже если они были унаследованы по приведенным выше правилам)


Например, ваш superclass имеет три назначенных (designated) инициализатора с различными аргументами. Если вы переопределите (override) все, то тогда вы наследуете все convenience inits вашего superclass.
Также если вы не реализуете ничего, вы наследуете все назначенные (designated) инициализаторы и все convenience inits вашего superclass в этом случае.
Это правила наследования. Людей это ставит в тупик : » Я реализовал один инициализатор, а почему другие не работают?»
Как только вы реализовали один назначенный (designated) инициализатор, вы не наследуете остальные. Либо все, либо ничего, если дело касается назначенных инициализаторов (designateds).
В отношении convenience inits тоже либо все, либо ничего.
Потому что вы должны либо реализовать все, либо не реализовать ничего, чтобы получить в наследство convenience inits.
Любой init, унаследованный по этим правилам должен принимать в внимание правила на предыдущем слайде.
Возможно иметь то, что называется required init. Если вы поставили ключевое слово required перед  init, то это означает, что subclasses должны реализовать этот  init. 
Вы можете наследовать required init по правилам, указанным выше.
Если вы не реализовали ни одного назначенного инициализатор, то вы наследуете все, в том числе и  required init. Это нормально. Но если вы реализовали какой-то из назначенных инициализаторов, то вы должны выполнить и required inits.

Читать далее

Лекция 4 CS193P Winter 2015 — Больше Swift и Foundation Frameworks. (часть 1)

Title iOS 8

STANFORD UNIVERSITY: Разработка iOS 8 приложений с Swift CS193P

 Лекция 4: Больше Swift и Foundation Frameworks

Профессор Пол Хэгарти (Paul Hegarty)

Лекцию на английском языке и слайды можно найти на  iTunes название  “4. More Swift and Foundation Frameworks”.

Русскоязычный неавторизованный конспект лекции приведен ниже.

Вы можете читать PDF-файл конспекта и использовать его offline

Лекция 4 CS193P Winter 2015 iOS 8.pdf

Начало: 1 — ая часть лекции (0 — 37 минут).
Продолжение: 2 — ая часть лекции (37 минута — конец ) — находится здесь.

Добро пожаловать на лекцию 4 CS193p, Stanford Winter of 2015.

До сих пор я показывал демонстрационные примеры, но сегодня будут только слайды. Я должен многое рассказать, если не все, что вам предлагается в Заданиях для чтения ( Reading Assignments), но я должен высветить очень важные темы, а кроме того, показать некоторый материал, который не представлен в Заданиях для чтения ( Reading Assignments) и который вы должны знать. Это вовсе не замещает чтения, но позволит сфокусироваться на ключевых темах.

Screen Shot 2015-02-10 at 6.28.04 PM

Читать далее

Лекция 3 CS193P Winter 2015 — Применяем MVC. (часть 2)

STANFORD UNIVERSITY: Разработка iOS 8 приложений с Swift CS193P

 Лекция 3: Применяем MVC

Профессор Пол Хэгарти (Paul Hegarty)

Лекцию на английском языке и слайды можно найти на  iTunes название  “3. Applying MVC”.

Это — продолжение: 2 — ая часть лекции (36 минута — конец ), код для Swift 1.2 находится на  Github. Код для Swift 2.0 находится на Github.

Начало: 1 — ая часть лекции (0 — 36 минут) можно посмотреть здесь.

—————————— 36 минута лекции ———————————

Screen Shot 2015-02-07 at 7.58.59 AM

Давайте займемся написанием кода для нашей вспомогательной функции

func evaluate(ops: [Op])  -> (result: Double?, remainingOps: [Op])

И первое, что я сделаю в этой рекурсивной функции, — напишу строку кода для случая невозможности выполнения рекурсии с возвращением nil.

return (nil, ops)

Это строка говорит о том, что я (калькулятор) делаю все, что могу, чтобы оценить ops, который вы мне передали, но я не могу это сделать и возвращаю в качестве результата  nil.
Это будет мой возврат кортежа по умолчанию: в случае отсутствия операндов в стеке или недостаточного их количества и т.д.

Читать далее

Лекция 3 CS193P Winter 2015 — Применяем MVC. (часть 1)

Title iOS 8

STANFORD UNIVERSITY: Разработка iOS 8 приложений с Swift CS193P

 Лекция 3: Применяем MVC в iOS

Профессор Пол Хэгарти (Paul Hegarty)

Лекцию на английском языке и слайды можно найти на  iTunes название  “3. Applying MVC”.

Русскоязычный неавторизованный конспект лекции приводится ниже.

Вы можете читать к PDF-файл конспекта и использовать его offline

Лекция 3 CS193P Winter 2015 iOS 8.pdf

Начало: 1 — ая часть лекции (0 — 36 минут).

Продолжение: 2 — ая часть лекции (36 минута — конец ) — находится здесь.

Код для Лекции 3 находится на Github.

Это лекция 3. Она вся будет посвящена демонстрационному приложению Calculator.

Сегодня сделаем наш калькулятор Сalculator более мощным. Но что более важно, мы заставим его следовать парадигме конструирования  MVC. То есть я покажу, как мы разделим наше приложение на 3 лагеря. Ну, а кроме этого я буду продолжать знакомить вас с возможностями языка Swift, как обычно. Собственно это является задачей первых 3-х лекций с демонстрационным приложением Calculator.
Моя задача показать вам все это в действии, потому что вы можете сколько угодно читать о Swift, iOS, но до тех пор, пока вы не увидите это в действии, не превратите это в приложение, реально вы не будете знать Swift и iOS. Моя задача сделать для вас это реальностью.

Читать далее

Лекция 2 CS193P Winter 2015 — Больше Xcode и Swift, MVC. (часть 3 — Autolayout)

STANFORD UNIVERSITY: Разработка iOS 8 приложений с Swift CS193P

 Лекция 2: Больше Xcode и Swift

Профессор Пол Хэгарти (Paul Hegarty)

Лекцию на английском языке и слайды модно найти на  iTunes название “2. More Xcode and Swift, MVC”.

Это продолжение: 3 — ая часть лекции (44 минута — конец ) —  Autolayout , MVC. Код для Swift 1.2 этой части на GitHub. Код для Swift 2.0 этой части на GitHub.

Начало: 1 — ая часть лекции (0 — 30 минут) — находится здесь, код для этой части на GitHub.

Продолжение: 2 — ая часть лекции (30 минута — 44 минута )- находится здесь, код для этой части на GitHub.

Последняя вещь, которую я собираюсь сделать — это выполнить Autilayout над кнопками: цифровая клавиатура и кнопки с операциями.

Читать далее