Задание 3 cs193p Spring 2016 Графический Калькулятор. Решение обязательных пунктов.

Screen Shot 2016-06-30 at 12.20.58 PM

Содержание

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

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

iOS 9 Задания

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

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

Продолжение решения Задания 3 — дополнительные пункты можно посмотреть здесь для Xcode 7 и Swift 2.2.

Код можно посмотреть на Github в окончательном варианте Задания 3 для Xcode 7 и Swift 2.2.

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

Читать далее

Лекция 7 CS193P Spring 2016 — Closures, Extensions, Protocols, Delegation и ScrollView

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

  • Управление памятью ссылочных типов
  • Замыкания и Захват в замыкании
  • Расширения
  • Протоколы
  • Делегирование
  • Scroll View

Классы, замыкания, функции — это ссылочные типы, которые “живут” в “куче” (heap). И эта память автоматически управляется iOS вместо вас. Такой режим работы называется “автоматический подсчет ссылок” (automatic reference counting) ARC, потому что работает схема подсчета ссылок, отслеживающая количество указателей объекты, и когда оно равно 0, память для этого объекта немедленно освобождается. Это отличается от “сборщика мусора”, который пробегает по “куче”, пытается найти то, на что никто не указывает, метит это, а потом все “выметает”. Это скачкообразный процесс и действительно непредсказуемый, в то время как  ARC полностью и абсолютно предсказуем.

Читать далее

Лекция 6 CS193P Spring 2016 — множественные MVCs, Segues, FaceIt и View Controller

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

  1. множественные MVCs, segues
  2.  «жизненный цикл» View Controller.

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

Читать далее

Всемирная конференция разработчиков WWDC 2016. Что впечатлило.

Screen Shot 2016-06-14 at 12.14.23 PM

Apple анонсировала множество новых возможностей на своей ежегодной конференции разработчиков WWDC 2016. Я хочу поделиться с Вами некоторыми из них, которые, по-моему,заслуживают внимания….

— Swift Playgrounds с iOS 10, теперь вы можете писать Swift код прямо на вашем iPad. Важно заметить, что новые приложения  playgrounds — это не Xcode. Правда вы можете открыть в этом приложении Swift Playgrounds, разработанные в Xcode, путем «сбрасывания» AirDrop ваших файлов на iPad. Конечно, с помощью этого приложения вы не сможете создать полностью готовое приложение на вашем iPad. Но это, возможно, мотивирует Apple в сторону разработки iOS приложений на iPad. Специально для  Swift Playgrounds в клавиатуру добавили дополнительный ряд символов. Я уверена, что это новое приложение привлечет больше людей в прекрасный мир Swift! Приложение появится осенью и будет бесплатным.

— SiriKit  Это долгожданная новость! Apple анонсировала, что вы можете интегрировать Siri в код вашего приложения. Например, вы могли бы в своем приложении Калькулятор не набирать операнды и операции на клавиатуре, а сказать Siri: «Рассчитай-ка мне функцию sin(M) + M для M = π и построй график.»

— Xcode 8 Здесь множество обновлений, но больше всего впечатляют инструменты отладки. Если ваше приложение «ест» много памяти, то  Xcode теперь предоставляет вам карту для просмотра того, как все объекты в вашем приложении связаны. Демонстрация этого — просто сногсшибательная. Теперь Xcode  8, как и другие IDEs, поддерживает подключение  plugins (extensions).

-Swift 3 Chris Lattner (создатель Swift) сказал, что главная цель этой версии Swift — стабильность. Те, кто использует Swift на протяжении последних двух лет, знает, что он изменился ЗНАЧИТЕЛЬНО. Все эти изменения были сделаны, чтобы изобрести наилучшую версию Swift. Надеюсь, что Swift 3 будет самой стабильной версией Swift и что новые версии не будут рушить существующий код. Кстати, Xcode 8 поставляется с двумя версиями Swift: Swift 2.3 (очень небольшие изменения по сравнению со Swift 2.2) и Swift 3, так что нет принуждения : вы сами можете решить, когда вам переходить на Swift 3.

Демонстрационные примеры и Задания для курсов iOS 9 и iOS 8 будут адаптированы к iOS 10 и Swift 3, когда появится официальная версия.

 

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

Содержание

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

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

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

Задание 2 расширяет возможности калькулятора Calculator из Задания 1, позволяя ему вводить “переменные” и выполнять операцию Undo. Кроме того, вам необходимо внести в код все изменения, сделанные на лекции 3 (переменную program типа Property List и атрибуты управления доступом).  Кроме того, выполнение всех его пунктов позволит вам овладеть навыками работы с такими синтаксическими конструкциями как enum, Dictionary, Array, кортежи, Optional, String, Наблюдатели Свойств. 

Код Задания 2 представлен в двух вариантах:

  1. переменная как операнд — на Github для Xcode 7 и Swift 2.2.
  2. переменная как операция  — на Github для Xcode 7 и Swift 2.2.

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

Ниже представлено решение всех обязательных и дополнительных пунктов Задания 2.

Читать далее

Лекция 5 CS193P Spring 2016 — Interface Builder, FaceView Controller, Жесты и Множественные MVCs

Как видно из названия,  Лекция 5 охватывает множество важных тем: дополнительные возможности Xcode по отображению пользовательских изображений непосредственно на storyboard, взаимодействие Модели и Controller с целью изменения View, жесты, множественные MVC и способы их создания.

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

Показано, как с помощью атрибутов  @IBDesignable и @IBInspectable можно получать и настраивать пользовательские изображения непосредственно на storyboard. Как заставить пользовательский UIView «переписываться» при изменении его public параметров.

Читать далее

Лекция 4 CS193P Spring 2016 — Views

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

Читать далее

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

На Лекции 3 профессор говорит по большей части о слое, который лежит под слоем пользовательского интерфейса (UI). А именно о языке Swift и о фреймворке Foundation, который “живет” в верхней части Core Services. В этой лекции вообще нет ничего о UI. 

Лекция начинается с подробного рассказа о том, что представляет собой Optional и как интерпретировать такой «синтаксический сахар» для него, как ?, !  и ??, а также «цепочки» Optional. Кратко представлены кортежи (tuples) и диапазоны  Range<T> .

Затем анализируются основные структуры данных в Swift : class, struct, enum. Обсуждается их сходство и различия. Особенное внимание уделено семантике value type и reference type. Подробно представлен синтаксис именования параметров функций в Swift. Рассматриваются самые «крутые» возможности свойств: наблюдатели  willSet{} и didSet {} и отложенная инициализация lazy. Уделено должное внимание массивам Array<T>,  словарям Dictionary <Key, Value>, строкам String и их интересным методам.

Читать далее

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

Содержание

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

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

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

Ниже приводится решение всех пунктов задания для тех, кто хочет сравнить свой результат с моим, и окончательный код  Задания 1 на Github.

В дополнение к Заданию 1 решаются вопросы работоспособности приложения на реальном устройстве в разных Регионах и построения адаптивного интерфейса, когда UI выглядит принципиально по-разному в портретном и ландшафтном режимах.

Для отдельных пунктов Задания есть релизы на Github для Xcode 7 и Swift 2.2.:
обязательные пункты 1-3, дополнительный 4,
обязательные пункты 4-8, дополнительный 4,
 дополнительные  1-2,
 дополнительный  3
с региональной точкой 
адаптивный интерфейс
отдельный Action для кнопки С
программируемый калькулятор — Лекция 3
глобальный formatter c помощью мгновенно выполняемого замыкания 

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

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

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

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

Читать далее

Лекция 2 CS193P Spring 2016 — Применяем MVC.

Screen Shot 2016-05-05 at 8.38.58 PM

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

Затем следует продолжение демонстрационного приложения Калькулятор, начатого на прошлой лекции. Происходит разделение классов Модели и классов, обслуживающих View Controllers. Появляется новый класс CalculatorBrain, который является классом Модели и имеет свои особенности. На примере этого класса профессор показывает, как проектировать класс, отталкиваясь от его public API. Используются все возможные в  Swift структуры данных : класс class, перечисление enum и структура struct. Подчеркиваются основные их отличия. Очень подробно рассказывается об ассоциированных значениях enum и Optionals, которые также являются enum.

Читать далее