Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView и перемещение ячеек.

Содержание

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

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительного пункта 6 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Дополнительного пункта 6 находится на Github.

Пункт 6 дополнительный

Добавьте некоторый UI элемент, который показывает новый View Controller, отображающий UICollectionView всех первых изображений (image) (или, если хотите, всех images) во всех твитах, которые удовлетворяют условиям поиска.  Когда пользователь кликает на изображении (image) в этом UICollectionView, “переезжайте” (segue) на показ этого Tweet (даже если вы будете показывать один Tweet, вам все равно следует использовать ваш TweetTableViewController и тогда вам будет доступна функциональность “преследования mentions”).

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Содержание

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

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительных пунктов 1 — 5 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Обязательных пунктов 1- 10 находится на Github.
Код для Дополнительных пунктов 1- 5 находится на Github.

Пункт 1 дополнительный

В секции Users вашего нового UITableViewController представьте список не только пользователей, users, упомянутых в твите, но также и пользователей users, пославших твит в первое место.

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.

Содержание

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

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Обязательных пунктов 1 — 7 Задания 4.
Код можно найти на Github.

Продолжение решения Задания 4 находится в посте Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Для того, чтобы начать с проекта, который профессор демонстрировал на Лекции 9, вам нужно создать workspace (рабочее пространство) в Xcode, которое содержит оба проекта:  Smashtag L9 project c Лекции 9 и поставляемый профессором Twitter фреймворк project. Так получилось, а может быть это сделано специально для учебных целей, но эти два проекта находятся в разных местах:  Smashtag L9 находится на  iTunes название “Lecture 9 Demo Code: Smashtag«или на Github, а ссылка на проект для фрейворка Twitter дана непосредственно в

Задание 4 iOS 10.pdf

 и может быть скачан отсюда. Вы должны создать рабочее пространство workspace в Xcode, поместить туда два ваши проекта и установить между ними связь. Поэтому в Задании 4 у нас появился отдельный этап — подготовка, которая описывается в подсказках № 2 и 3 Задания 4.

Подготовка

Подсказка № 2. Помните, что вы должны создать workspace в Xcode, который содержит оба проекта: ваш Smashtag project и поставляемый Twitter фреймворк project. Оба проекта должны быть равноправны (siblings) (не должно быть отношение наследования одного по отношению к другому) в рабочем простанстве (workspace)
Подсказка № 3. Вам необходимо перетянуть Twitter фреймворк (из навигационной панели вашего рабочего пространсва workspace) на закладку General установок (Settings) вашего Smashtag Project в раздел Embedded Binaries.

Читать далее

Лекция 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 , наглядно показывает необходимость использования многопоточности.
Читать далее

Задание 3 cs193p Winter 2017 «Графический» Калькулятор. Решение. Обязательные пункты.

Содержание

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

Задание 3 iOS 10.pdf

В Задании 3 вы должны усовершенствовать свой калькулятор Calculator в плане создания графика для того, что пользователь ввел в ваш калькулятор. Этот график может масштабироваться (zoom in) с помощью жеста pinch и перемещаться по экрану с помощью жеста pan. Ваше приложение теперь будет работать не только на iPhone,  но также и на iPad.
Для успешного выполнения Задания 2 нужно изучить материалы Лекции 5Лекции 6 и Лекции 7.

Мое решение Задания 3 cs193p Зима 2017 г. находится на Github:

Код для отдельного Графического MVC на Github.
Код для обязательных пунктов находится на Github.
Код для обязательных и дополнительных пунктов находится на Github.

В данном посте представлено выполнение обязательных пунктов Задания 3.

На Лекции 5 и в подсказке №8 Задания 3 рекомендуется:

Это Задание стало доступно перед Лекцией, на которой демонстрируется как использовать множественные MVCs в вашем приложении. Вы можете начать выполнять это Задание перед Лекцией (которую очень рекомендую!) и подумать о том, чтобы создать абсолютно новое приложение, в котором находится единственный MVC: ваш новый графический MVC. Просто выберите некоторую удобную для рисования функцию с целью отладки приложения (например, cos(x) ). Затем после следующей Лекции, когда вы изучите как обращаться с множественными MVCs, вы можете просто добавить ваш повторно используемый графический MVC (включая его повторно используемый UIView) в приложение “Графический Калькулятор” для Задания № 3.

Поэтому мы будем выполнять обязательные пункты Задания 3 не в порядке нумерации.

Читать далее

Лекция 6 CS193P Winter 2017 — множественные MVCs, View Controller Lifecycle, and Memory.

В Лекции 6 рассматриваются три главных темы :

  1. демонстрационный пример множественных MVCs, segues
  2. «жизненный цикл» View Controller.
  3. управление памятью (strong, weak, unowned )

Лекция 6 продолжает тему множественных MVCs, начатую в конце лекции 5, где было показано как можно комбинировать MVCs с помощью Tab Bar Controllers, Split View Controllers и Navigation Controllers и как подсоединять их на storyboard с помощью segues. Они всегда создают новый экземпляр вызываемого MVC и нуждаются в инициализации этого MVC, например, с использованием метода prepareForSegue.

Читать далее

Задание 2 cs193p Winter 2017 «Умный» Калькулятор. Решение. Обязательные и дополнительные пункты.

Содержание

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

Задание 2 iOS 10.pdf

В Задании 2 вы усовершенствуете возможности Калькулятора, позволяя ему вводить “переменные” и поддерживать операцию Undo. Вы также подготовите Калькулятор к Заданию 3 следующей недели.
Для успешного выполнения Задания 2 нужно изучить материлы Лекций 1, 2 и 3.

Несмотря на схожесть названия Задания 2 в курсе «Developing  iOS 10 Apps with Swift» на название Задание 2 в предыдущем курсе  «Developing iOS 9 Apps with Swift», вам предлагается реализовать его совершенно по-другому, ближе к функциональному стилю программирование, а не объектно-ориентированному как было в прошлый раз. И начало этому положено в Задании 1 и на Лекциях 1 и 2, когда Модель CalculatorBrain, которая в прошлом курсе была  классом class, была заменена на структуру struct

В этом Задании вам придется кардинально поменять Модель вашего MVC и составить ее уже из двух совершенно отдельных структур данных: struct CalculatorBrain и Dictionary<String : Double> variableValues . Это абсолютно законно. Нет правила, которое бы говорило, что ваша Модель должна иметь единственную структуру данных.
Некоторые подсказки вы найдете в Лекции 3.

От вас потребуется знание всего спектра приемов работы со структурами struct, перечислениями enum, семантическое понимание Optional, использование замыканий и т.д.

Мое решение Задания 2 Зима 2017 г. Находится на Github:

Код для обязательных пунктов находится на Github.
Код для обязательных и дополнительных пунктов находится на Github.

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

Не изменяйте, не убирайте и не добавляйте ничего в public API (то есть НЕprivate func и vars) из вашего CalculatorBrainв Задании 1, за исключение undo ()и того, что определено в Обязательных пунктах 3 и 4. Продолжайте использовать Dictionary<String,Operation> в качестве основной внутренней структуры данных для выполнения операций в CalculatorBrain.

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

Ваш пользовательский интерфейс (UI) должен быть всегда синхронизирован с вашей Моделью (CalculatorBrain).

Пункт 3 обязательный

Наделите ваш CalculatorBrain способностью вводить “переменные”. Сделайте это путем реализации следующего API в вашем CalculatorBrain

func setOperand  (variable named: String)

Эта  функция должна делать в точности то, что вы можете себе представить: вводить “переменную” как операнд (например, setOperand (variable: “x”) будет вводить переменную с именем х). Установка операнда в x, а затем выполнение операции cos будет означать cos (x) в вашем CalculatorBrain.

Читать далее

Задание 1 cs193p Winter 2017 Калькулятор.Решение. Обязательные и дополнительные пункты.

Содержание

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

Задание 1 iOS 10.pdf

Начинаем выполнять Задание 1 с кода, полученного в конце Лекции 2. Профессор настоятельно рекомендует не копировать код первых 2-х Лекций, а непосредственно печатать его в Xcode, так как это даст хороший опыт освоения среды разработки Xcode 8.

Я все-таки привела на Github коды демонстрационного примера, соответствующие окончанию Лекций 1 и 2. Это позволит совсем начинающим не «застрять» на самом первом этапе.

Решение Задания 1 находится на Github:

без кортежа в Моделе CalculatorBrain —  на Github
c кортежем в Моделе CalculatorBrain —  на Github

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

Ваш Калькулятор (Сalculator) уже умеет работать с числами с плавающей точкой (например, если вы последовательно будете нажимать на клавиши 3 ÷ 4 =,  то он покажет правильный результат  0.75), тем не менее, пока нет возможности ввести число с плавающей точкой. Это надо исправить. Разрешите вводить только правильные числа с плавающей точкой (например,  “192.168.0.1”  — неправильное число с плавающей точкой). Вам нужно добавить новую кнопку с точкой “.”. В обязательных пунктах этого Задания не беспокойтесь о точности и значащих цифрах (выполнение этой работы относится к дополнительным пунктам этого Задания).

Прежде всего надо сделать небольшое замечание относительно точки «.» как десятичного разделителя.

Замечание. Если вы будете использовать символ  точки «.» в качестве десятичного разделителя в Задании 1, то оно может работать на симуляторе и может не работать на вашем реальном устройстве, если Регион на вашем приборе установлен так, что там не применяется «.» для десятичных чисел. В этом случае приложение закончится аварийно. Мы будем проектировать приложение, которое должно работать на симуляторе. В конце выполнения всех пунктов (обязательных и дополнительных) Задания 1 в примечании я расскажу, что нужно делать, чтобы не зависеть от Региона.

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

Читать далее

Лекция 5 CS193P Winter 2017 — Жесты и множественные MVCs.

Лекция 5 охватывает множество важных тем:

  •  взаимодействие Модели и Controller с целью изменения View,
  •  жесты, которые являются “входом” для нашего приложения, 
  •  множественные MVC и как построить большие приложения, которые состоят из комбинаций различных MVCs,
  •  segues и подготовка MVC с помощью метода prepare (forSegue:)

В начале Лекции 5  обсуждается Модель для приложения FaceIt, которая позволяет задавать «выражение лица». В Controller в виде переменных vars создаются две «зеленые стрелки«:  одна — к Модели, другая — к View . Помните их на картинках, посвященных MVC? Для удержания Модели и View в синхронном состоянии для обеих переменных  vars используется очень крутая возможность Swift — Наблюдатели Свойств (Property Observers), одним из которых является didSet {}. Но, оказывается,  didSet {} срабатывает не всегда. Как «разрулить» эту ситуацию и рассказывает Пол Хэгерти в начале Лекции 5.  Чрезвычайно полезная вещь.

Читать далее

Лекция 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).

Читать далее