Используйте pattern matching case .loading(let progress), а остальные случаи обработайте отдельно. В примере извлечённое значение равно 0.5.
Обработка ассоциированных данных в перечислении
Используйте pattern matching case .loading(let progress), а остальные случаи обработайте отдельно. В примере извлечённое значение равно 0.5.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создай конструкцию switch, которая извлекает значение progress из перечисления.
enum NetworkResponse {
case success(data: Data)
case failure(error: Error)
case loading(progress: Double)
}
let networkResult: NetworkResponse = .loading(progress: 0.5)
switch networkResult {
// реализуй извлечение progress
}
Ответ
Используйте pattern matching case .loading(let progress), а остальные случаи обработайте отдельно. В примере извлечённое значение равно 0.5.
switch networkResult {
case .loading(let progress):
print(progress)
case .success(let data):
print("Получено байт: \(data.count)")
case .failure(let error):
print("Ошибка: \(error.localizedDescription)")
}
Switch исчерпывающе покрывает все варианты enum. progress — локальная константа только ветки loading; присваивание нового значения этой константе не меняет исходный NetworkResponse. Если интересует только загрузка, возможна краткая форма if case .loading(let progress) = networkResult, но для полной обработки результата switch удобнее.