Задание 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 в примечании я расскажу, что нужно делать, чтобы не зависеть от Региона.

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

Читать далее

CS193P Stanford Spring 2016. Задание 6. Анимация. Решение. Ощутите «магию» Swift 3 на простейшей игре Breakout с Dynamic Animation.

screen-shot-2016-11-08-at-8-20-54-pm

Screen Shot 2015-09-11 at 10.50.23 AM

Текст Домашнего задания на английском языке доступен на iTunes «Developing iOS 9 Apps with Swift. Programming Project 6: Animation»Текст Задания 6 на русском  языке размещен в PDF — файле

Задание 6 iOS 9.pdf


Для выполнения Задания 6 необходимо освоить материал Лекции 14.
В качестве прототипа кода для Задания 6 можно использовать код приложения «Dropit L14«, полученный на Лекции 14, который доступен на сайте Stanford для Swift 2 и Xcode 7 ; для Xcode 8 и Swift 2.3  — на Github, для  Xcode 8 и Swift 3 — на Github, для Xcode 8Swift 3 и iOS 10 — на Github.
В этом посте подробно описывается выполнение обязательных и дополнительных пунктов Задания 6. В посте представлен код для  Xcode 8Swift 3 и iOS 10, который находится на Github в разделе Breakout_Assignment_6.

Да, будем выполнять Домашнее Задание 6 сразу для iOS 10 и Swift 3, потому что Задание 6 не связано с данными, получаемыми из сети, не связано с существенно усовершенствованными в iOS 10  фреймворками Core Data и UserNotifications. Приложение Задания 6 будет очень простым в архитектурном плане — там не будет ни SplitViewController, ни специальных seguesPopovers, Unwind Segues, Embedded Segues, Modal Segues. Оно будет представлять собой два слабо связанных между собой MVC, объединенных простейшим множественным MVCTabBarController. В Задании 6 нам предлагается продемонстрировать умение работать с системой Dynamic Animation, управляя динамическими элементами в виде UIViews. Кроме того, мы можем в таком простейшем приложении показать все возможные механизмы запуска кода — код в iOS приложениях не исполняется линейно, отдельные его фрагменты можно запустить с помощью:

  1.  жестов,
  2.  методов «жизненного цикла» UIViewController ( viewWillAppear, viewDidLoadviewDidLayoutSubviews и т.д.) и UIViewlayoutSubviews )
  3.  Наблюдателей Свойства didSet{ }, willSet{ },
  4.  lazy ( отложенной) инициализации,
  5.  инициализации в виде выполняемого замыкания ( с круглыми скобками «()» в конце),
  6.  делегирования, которое реализуется в Swift свойствами в виде замыканий,
  7. вычисляемых переменных с хранением в другом месте (другое свойство, NSUserDefaults, Core Data).

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

Читать далее

Задание 6 cs193p Spring 2016 Задание VI: Игра Breakout. Анимация.

Screen Shot 2016-09-03 at 1.30.15 PM

Содержание

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

Задание 6 iOS 9.pdf


В Задании 6 вы должны создать простую игру Breakout, используя Dynamic Animator.
Это задание намеренно не имеет четко очерченных возможностей вашей игры, давая вам простор для демонстрации вашей креативности. Хороший разработчик iOS приложений должен не только иметь хорошие программисткие навыки, но и креативные способности.

Однако дается примерный вид экрана, представленный в начале поста, но это не Обязательный пункт Задания. Фактически, Обязательным пунктом Задания 6 является показ некоторой креативности, а не просто тупое копирование этого вида экрана. Примерный вид экрана приведен для тех, кто только из текста Задания 6 абсолютно не может понять, о чем идет речь. Так что  … пожалуйста, не делайте ваше решение абсолютно похожим на это …

Для выполнения Задания 6 нужно посмотреть видео и текстовые материалы Лекции 13 и Лекции 14. Демонстрационные приложения FaceIt L13 и  DropIt L14 для этих лекций находятся на сайте Стэнфорда.

Какие-то идеи можно взять из решения подобного Задания 5 с прошлого курса по iOS 8.

Мое решение будет представлено позже…

 

Задание 5 cs193p Spring 2016 Smashtag Mentions Popularity. Решение дополнительного пункта 4 (удаление старой информации из Core Data).

Screen Shot 2016-08-14 at 12.47.59 PM

Содержание

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

Задание 5 iOS 9.pdf

Начало решения Задания 5 — все обязательные и дополнительные пункты, кроме 4-го дополнительного пункта — находятся в посте «Задание 5 cs193p Spring 2016 Smashtag Mentions Popularity (Клиент Twitter). Решение».

В данном посте мы рассмотрим особенности решения дополнительного пункта 4 Задания 5, считая, что все предыдущие обязательные и дополнительные пункты Задания 5 выполнены. В решении, представленном ниже, используется  UIManagedDocument для получения контекста базы данных Core Data.

Код для Задания 5 без дополнительного пункта 4 находится на Github для Xcode 7 и Swift 2.2
Код для полного Задания 5 (включая дополнительный пункт 4) находится на Github для Xcode 7 и Swift 2.2.

Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

Следуем методики разработки Core Data приложений, изложенному Полом Хэгерти на Лекции 11.

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

Вам не требуется нигде что-либо уничтожать из базы данных, тем не менее, нам необходима информация лишь о наиболее поздних поисках в Twitter, так что со временем у нас напрасно занимается большой объем дискового пространства. Заставьте ваше приложение удалять из базы данных объекты, которые больше не представляют интереса (то есть доступ к этим данным не будет осуществляться в вашем UI) с тем, чтобы поддерживать регулируемый размер базы данных. Вы должны самостоятельно решить, когда наступает подходящее время для удаления уже неиспользуемых данных. 

Читать далее

Задание 4. CS193P Spring 2016. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView с расположением ячеек типа WaterFall и переключение между Layouts.

Screen Shot 2016-07-22 at 4.46.32 PM

Класс UICollectionView отличается UITableView наличием свойства UICollectionViewLayout, которое отвечает за расположение (layout) ячеек в двухмерным пространстве, не заботясь о содержимом этих ячеек. По умолчанию работает расположение (layout)  UICollectionViewFlowLayout, которое действует наподобие размещения текста по строкам слева направо с переносом на другую строку. Именно этот layout мы использовали при выполнении дополнительного пункта 6 Задания 4. Но есть очень привлекательное расположение ячеек, которое организует их по столбцам таким образом, чтобы они как можно плотнее заполняли все пространство. Это так называемый стиль Pinterest или еще его называют «анти-Тэтрис» или Waterfall (водопад). Ниже на рисунке цифрами показан порядок заполнения ячеек.
Screen Shot 2015-07-13 at 8.41.29 PM
Алгоритм расположение очень прост: каждая следующая ячейка располагается в столбце, наименее занятом по вертикали,  c соответствующим Aspect ratio.  Класс CHTCollectionViewWaterfallLayout, реализующий этот алгоритм расположения ячеек в Collection View представлен в Github. Давайте попробуем использовать его в решении Задания 4. Читать далее

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

Содержание

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

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

iOS 9 Задания


Для выполнения Задания 4 необходим материал  Лекции 8 и Лекции 9. Исходное приложение Smashtag L9 находится на сайте Стэнфорда для Xcode 7 и Swift 2.2. Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

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

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

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

Код для Обязательных пунктов 1- 7 находится на Github для Xcode 7 и Swift 2.2.
Код для Обязательных пунктов 1- 10 находится на Github для Xcode 7 и Swift 2.2.
Код для Дополнительных пунктов 1- 5 находится на Github для Xcode 7 и Swift 2.2.
Код для Дополнительного пункта 6 можно найти на Github для Xcode 7 и Swift 2.2.

Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

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

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

Читать далее

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

Screen Shot 2016-07-20 at 6.47.01 AM

Содержание

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

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

iOS 9 Задания


Для выполнения Задания 4 необходим материал  Лекции 8 и Лекции 9. Исходное приложение Smashtag L9 находится на сайте Стэнфорда для Xcode 7 и Swift 2.2. Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

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

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

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

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

Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

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

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

Читать далее

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

Содержание

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

iOS 9 Задания


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

Для выполнения Задания 4 необходим материал  Лекции 8 и Лекции 9. Если вы установили Xcode 8, то исходное приложение Smashtag L9 находится для Swift 2.3  на Github, а для Swift 3 — также на Github.

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

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

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

Задание 4 iOS 9.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.

Читать далее

Задание 4 cs193p Spring 2016 Smashtag Mentions (клиент Twitter).

Содержание

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

iOS 9 Задания

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

Для выполнения Задания 4 нужно использовать материалы из Лекции 8 и Лекции 9 .

Если вы установили Xcode 8, то исходное приложение Smashtag L9 находится для Swift 2.3  на Github, а для Swift 3 — также на Github.

Решение можно посмотреть в постах:

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

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

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

Продолжение следует…