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

9. Экран текущего заказа такси

Средняя

Swift · 44 строк

Экран показывает цену и время подачи машины и раз в 5 секунд обновляет их. TaxiAPI вызывает completion на фоновой очереди URLSession. order.price — Double.

Отметьте строки с ошибками.

В работе: Экран ожидания машины: пользователь держит его открытым 3–10 минут.

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

Источник: Яндекс: мобильная разработка, секция «исправить ошибки в готовом коде». Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. final class OrderViewController: UIViewController {
  2. private let priceLabel = UILabel()
  3. private let etaLabel = UILabel()
  4. private let api: TaxiAPI
  5. private var timer: Timer?
  6. var orderId: String!
  7. init(api: TaxiAPI) {
  8. self.api = api
  9. super.init(nibName: nil, bundle: nil)
  10. }
  11. required init?(coder: NSCoder) { fatalError("init(coder:) не используется") }
  12. override func viewDidLoad() {
  13. super.viewDidLoad()
  14. timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { _ in
  15. self.refresh()
  16. }
  17. }
  18. private func refresh() {
  19. api.fetchOrder(id: orderId) { result in
  20. switch result {
  21. case .success(let order):
  22. let price = "\(order.price) ₽"
  23. self.priceLabel.text = price
  24. self.etaLabel.text = "Машина через \(order.etaMinutes) мин"
  25. case .failure:
  26. break
  27. }
  28. }
  29. }
  30. @objc private func cancelTapped() {
  31. api.cancelOrder(id: orderId) { [weak self] _ in
  32. self?.dismiss(animated: true)
  33. }
  34. }
  35. deinit {
  36. timer?.invalidate()
  37. }
  38. }