Текст Домашнего задания на английском языке доступен на iTunes в пункте “Developing iOS 8 app: Programming: Project 2″. Текст Домашнего задания на русском языке доступен на Результаты выполнения задания можно обсуждать на форуме 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 показывает 18, description теперь √(7+M)+14
Делаем словарь variableValues с переменными private, а в API калькулятора добавляем non-private методы setVariable, getVariable и clearVariable
Располагаем на storyboard кнопки →M и M и с помощью CTRL-перетягивания создаем для них @IBAction функции setVariable и pushVariable
Проверяем работоспособность на примерах, представленных в задании.
Код можно посмотреть на Github.
Пункты 10 и 11 обязательные
Убедитесь, что кнопка С вашего Задания 1 работает правильно в этом задании.
Когда вы касаетесь кнопки С, переменная M должна быть убрана из variableValues Dictionary в CalculatorBrain ( не установлена в 0 или какое-то другое значение). Это позволит вам тестировать случай “неустановленной” переменной (потому что это заставит evaluate () вернуть nil, и таким образом, дисплей вашего калькулятора будет пустым, если M будет использоваться без →M).
Для придания гибкости API калькулятору — как нам советовали в подсказках — добавляем в CalculatorBrain еще два non-private метода clearStack и clearAll
Используем одну из этих функций в реализации кнопки С
Проверяем работоспособность на рекомендованной в подсказках последовательности ввода
C, M, → M, и т.д.
Пункт 12 обязательные
Ваш UI должен выглядеть хорошо на iPhone любого размера как в портретном, так и в ландшафтном режиме ( не беспокойтесь относительно iPad до следующей недели). Это означает, что вы должны сделать правильные установки Autolayout (Разметки) и больше ничего.
Выполнено. Код для Swift 1.2 и iOS 8.4 можно посмотреть на Github.
Код для Swift 2.0 и iOS 9 можно посмотреть на Github.
Такой вопрос, когда мы делаем словарь variableValues с переменными private, сразу пропадает возможность его использовать в тестах, как можно тестить приватные свойства и методы? Просто на время убирать private или есть еще что-то?
Посмотрите атрибут @testable — это то, что вам нужно.
@testable уже стоит)
загрузил скриншот, может что-то дополнительно нужно настроить)
Как я понял в Swift private это private и поэтому в тестах приватные свойства и методы недоступны. И атрибут @testable помогает делая internal методы/свойства — public.
У вас есть
internal func getVariable(symbol: String) -> Double?
internal func setVariable(symbol: String, value: Double)
internal func clearVariables()
Используйте эти методы.
Благодарю)