Войти Регистрация
Код-ревью

24. Форматирование операций в выписке

Лёгкая

Swift · 31 строк

Класс готовит строки для экрана выписки: название, сумму со знаком и группы операций по дням. Списания приходят с отрицательной суммой, у переводов между своими счетами merchant == nil. Отметьте строки с ошибками.

В работе: Лента операций в мобильном банке — самый частый экран после главного.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
опционалыDateFormatterформатирование денег

Источник: на задачах Альфа-Банка: выписка в мобильном приложении. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. struct Operation {
  2. let id: String
  3. let amount: Double
  4. let date: Date
  5. let merchant: String?
  6. }
  7. final class StatementFormatter {
  8. func title(for op: Operation) -> String {
  9. return op.merchant!
  10. }
  11. func amountText(for op: Operation) -> String {
  12. let sign = op.amount > 0 ? "+" : "−"
  13. return "\(sign)\(op.amount) ₽"
  14. }
  15. func dateText(for op: Operation) -> String {
  16. let formatter = DateFormatter()
  17. formatter.dateFormat = "dd MMMM YYYY"
  18. return formatter.string(from: op.date)
  19. }
  20. func groupByDay(_ ops: [Operation]) -> [String: [Operation]] {
  21. var groups: [String: [Operation]] = [:]
  22. for op in ops {
  23. groups[dateText(for: op), default: []].append(op)
  24. }
  25. return groups
  26. }
  27. }