Какой опыт работы по методологии Scrum и с фреймворком Combine у вас есть?

«Какой опыт работы по методологии Scrum и с фреймворком Combine у вас есть?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Опыт работы по Scrum:

  • Участие во всех артефактах и церемониях: планирование спринта, ежедневные стендапы, обзор спринта, ретроспектива.
  • Работа с системой управления задачами (Jira, YouTrack) для трекинга бэклога, спринтов и прогресса.
  • Оценка задач в story points, декомпозиция пользовательских историй на технические подзадачи.

Опыт работы с Combine: Использовал для реактивного биндинга данных и обработки асинхронных событий:

  • Сетевые запросы: Обертка URLSession в dataTaskPublisher.
  • Пользовательский ввод: Подписка на события UITextField через NotificationCenter или кастомные издатели.
  • Комбинирование данных: Использование операторов combineLatest, merge, zip.

Пример сетевого запроса с Combine:

import Combine

class UserService {
    private var cancellables = Set<AnyCancellable>()

    func fetchUser(id: Int) {
        let url = URL(string: "https://api.example.com/user/(id)")!

        URLSession.shared.dataTaskPublisher(for: url)
            .map( .data )
            .decode(type: User.self, decoder: JSONDecoder())
            .receive(on: DispatchQueue.main) // Переключаемся на главный поток для UI
            .sink(receiveCompletion: { completion in
                if case .failure(let error) = completion {
                    print("Ошибка загрузки: ", error)
                }
            }, receiveValue: { [weak self] user in
                self?.updateUI(with: user)
            })
            .store(in: &cancellables)
    }
}

Сочетал Combine с SwiftUI через @Published свойства в ObservableObject.