Задание 3. Решение — дополнительные пункты 4, 5 и 6. Окончание.

Screen Shot 2015-05-12 at 8.50.24 PM

Это решение Задания 3 — дополнительные пункты 4, 5 и 6. Обязательные пункты Задания, дополнительные пункты 1, 2 и 3, а также ссылки на текст самого Задания 3 можно посмотреть здесь:

Задание 3. Решение — обязательные пункты.
Задание 3. Решение — дополнительные пункты 1, 2 и 3.

Для окончательного решения код для Swift 1.2 находится на Github. Для Swift 2.0 код можно посмотреть на Github.

Читать далее

Задание 3. Решение — дополнительные пункты 1, 2 и 3

Screen Shot 2015-05-10 at 9.35.51 PM

Это решение Задания 3 — дополнительные пункты 1, 2 и 3. Обязательные пункты Задания, а также ссылки на текст самого Задания 3 можно посмотреть:

Задание 3. Решение — обязательные пункты.

Для данного поста код для Swift 1.2 находится на Github. Полное решение для Swift 2.0 можно посмотреть на Github.

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

Поймите, как работают Instruments,  анализируя производительность жестов  panning и pinching в вашем графическом View. Что делает перемещение графика по экрану таким “вялым”? Объясните в комментариях к вашему коду, что вы обнаружили и что с этим можно сделать.

Вместо запуска приложения запускаем Instruments для приложения с помощью  ⌘I и выбираем Time Profiler.
Screen Shot 2015-05-08 at 8.28.15 PM
Читать далее

Задание 3. Решение — обязательные пункты

Screen Shot 2015-05-16 at 9.24.07 AM

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

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


Для выполнения этого Задания необходимо освоение  Лекции 5Лекции 6Лекции 7 и Лекции 8.
В подсказке 4 Задания 3 предлагается некоторая методика разработки данного приложения, но каждый волен сам выбирать, какую часть приложения создавать в первую очередь. Поэтому обязательные пункты Задания 3 могут выполняться не в строгом порядке.

Код для Swift 1.2 находится на Github. Полное решение для Swift 2.0 можно посмотреть на Github.

Читать далее

Как создать NSNumberFormatter Singleton в Swift (1.2 и 1.1) — дополнение к Заданию 2

Мне было необходимо использовать класс NSNumberFormatter для изменения вида представления числа в  моем  CalculatorBrain в Задании 2 стэнфордского курса «Разработка iOS 8 приложений на Swift. Winter 2015», например, с 2324.00 на 2 324 без десятичных знаков, то есть придать универсальному NSNumberFormatter некоторую нужную мне конфигурацию. Из-за того, что инициализация NSNumberFormatter может быть экстремально дорогой операцией в iOS, способной «поставить на колени» отдельные приложения, не хотелось бы, чтобы производительность приложения зависела от этого, особенно если используется одна и та же конфигурацию  NSNumberFormatter всюду в моем приложении. Будем использовать Singleton ( синглтон ) — ровно один экземпляр некоторого класса, глобально  доступный всем клиентам.

Singleton (синглтон) — это популярный паттерн (шаблон ) проектирования. Если вы новичок в Swift, вам будет интересно, как можно в Swift создать Singleton. В Objective-C, возможно, вы уже пробовали для создания синглтона dispatch_once из Grand Central Dispatch.

В настоящее время существует прекрасный пост в  stack overflow, в котором рассматриваются все пути создания Singleton в Swift, хотя этот пост не снабжен каким-то «глубоким» практическим примером. Класс  NSNumberFormatter широко используется и пример использования Singletons в классе  NSNumberFormatter будет очень полезен.

Читать далее

Задание 3 cs193p Winter 2015 Графический Калькулятор

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

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

Для выполнения этого Задания необходимо освоение материала Лекции 5, Лекции 6 и Лекции 7.

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

 

Задание 2. Решение — Возвращаем enum Result (дополнительные пункты 2, 3) Swift 1.2 и Swift 2.0

Screen Shot 2015-03-31 at 5.32.05 PM
Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 2″.  Текст Домашнего задания на русском  языке доступен на

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

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

Это окончание решения Задания 2- дополнительные пункты 2 и 3, предыдущие пункты можно посмотреть:

Задание 2. Решение — обязательные пункты 1-4. 

Задание 2. Решение — обязательные пункты 5-8. 

Задание 2. Решение — обязательные пункты 9-12. 

Задание 2. Решение — Убираем лишние скобки. Дополнительный пункт 1. 

Окончательный вариант кода (включая все обязательные и дополнительные пункты) для Задания 2  можно найти на Githubиспользование паттерна проектирования Singleton для NSNumberFormatter можно посмотреть в посте

Как создать NSNumberFormatter Singleton в Swift (1.2  и 1.1) —  дополнение к Заданию 2, а код на Github

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

Добавьте “Undo” к вашему калькулятору: в дополнительном пункте Задания 1 вы добавляли  кнопку  “backspace”, если пользователь ввел неверную цифру. Теперь мы говорим о комбинации “backspace” и реального “Undo” в единственной кнопке. Если пользователь находится в середине ввода числа, то это кнопка работает как  “backspace”. Если пользователь не находится  в середине ввода числа, то должно выполняться Undo последней вещи, которая была выполнена в CalculatorBrain.     

Читать далее

Задание 2. Решение — Убираем лишние скобки (дополнительный пункт 1) Swift 1.2 и Swift 2.0

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

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

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

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

Сделайте так, чтобы ваша description имела как можно меньше круглых скобок для бинарных операций.

Теоретическая часть согласно подсказке в Задании 2 потребует добавления концепции “приоритета (precedence) операций” в Op вашего CalculatorBrain

Заметим, что все нижеприведенные рассуждения касаются только перевода нашего стэка, записанного в форме обратной польской записи (RPN), не требующей применения скобок, в инфиксную форму со скобкамиИнфиксная форма нужна только для представления описания стэка в привычной для пользователя форме var description и не влияет на вычисления нашего калькулятора.

Читать далее

Задание 2. Решение — продолжение (обязательные пункты 9-12) Swift 1.2 и Swift 2.0

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

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

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

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

Добавьте две новых кнопки на цифровую клавиатуру вашего калькулятора  Calculator:→M и M. Эти две кнопки устанавливают и получают соответственно переменную в CalculatorBrain, называемую M.

  • →M  устанавливает значение переменной M в CalculatorBrain в текущее значение на дисплее.
  • →M не должна автоматичски выполнять↵ (хотя она должна переустановить  “пользователь в середине печати числа”)
  • Касание M должно помещать (push) переменную M в стэк (не значение M) в CalculatorBrain
  • Касание любой другой кнопки должно показывать оценку  CalculatorBrain (то есть результат evaluate()) на дисплее.
  • →M и M являются механизмом Controller, а не механизмом Model (хотя они оба используют механизм “переменных” Model).
  • Это не выдающаяся кнопка “memory” на нашем калькуляторе, но она является хорошим инструментом для тестирования правильно ли работает наша переменная функция, реализованная выше.

Примеры …

7 M + √ ⇒ description имеет вид (7+M)display — пустой, та как M не установлена

9 →M  display показывает 4 (квадратный корень 16), description все еще показывает (7+M)

14 + ⇒ display показывает 18description теперь (7+M)+14

Делаем словарь variableValues с переменными private, а в API калькулятора добавляем non-private методы setVariablegetVariable и clearVariable

Читать далее

Задание 2. Решение — продолжение (обязательные пункты 5-8) Swift 1.2 и Swift 2.0

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

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

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

Начало решения Задания 2 находится здесь.

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

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

func pushOperand (symbol:String) -> Double?

var variableValues:Dictionary<String, Double>

Это должно делать точно то, что говорят названия : первая функция “толкает” “переменную” во внутренний стэк CalculatorBrain (например, pushOperand (“x”)  будет помещать переменную с именем х), а вторая переменная ввиде словаря позволит пользователю CalculatorBrain установить любое значение для любой переменной (например, brain.variableValues [“x”] = 35.0) . pushOperand должен вернуть результат evaluate() после помещения переменной в стэк (как pushOperand делает в других случаях).

В нашей Модели CalculatorBrain добавляем в перечисление enum вариант для переменных Variable:

Screen Shot 2015-03-26 at 2.57.03 PM
Функция func pushOperand (symbol:String) -> Double? для переменных будет выглядеть точно также, как и уже существующая, только вместо операнда мы будем добавлять в стэк переменную

Читать далее

Задание 2. Решение — начало (обязательные пункты 1-4) Swift 1.2 и Swift 2.0

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

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

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

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

Все изменения, сделанные с калькулятором Calculator на лекции, должны быть внесены в код вашего Задания 1. Сделайте полученный Calculator полностью функционирующим прежде, чем вы приступите к выполнению остальных обязательных заданий. И, как и в прошлый раз “печатайте” изменения в коде, а не используйте copy / paste.

В этом пункте мы должны совместить изменения в коде, сделанные на Лекции 3, когда происходит разделение на Модель и Controller, и калькулятор, который получился при выполнении Задания 1 без разделения на Модель и Controller. Это калькулятор описан в посте.

Код можно посмотреть на Github.

Читать далее