Ассоциированные значения позволяют каждому case enum'а хранить дополнительные, специфичные для case'а данные любого типа вместе с самим case'ом.
enum NetworkResult {
case success(Data)
case failure(Error)
case progress(Double)
}
Каждый case может нести разные типы и количество значений, в отличие от raw values, которые должны быть одинаковыми.
Используй pattern matching для доступа к сохранённым данным:
switch result {
case .success(let data):
print("Received: \(data)")
case .failure(let error):
print("Error: \(error)")
case .progress(let percent):
print("Progress: \(percent)%")
}
Ты также можешь использовать if case для однократного сопоставления:
if case .success(let data) = result { ... }
Ассоциированные значения делают enum'ы значительно более выразительными по сравнению с простыми флаг-подходами, позволяя писать type-safe, самодокументирующийся код, где данные и их контекст всегда связаны вместе.
Связанные значения в enum'ах Swift должны быть одного типа во всех case'ах, подобно тому, как работают raw values.
Новый — ещё не проверен сообществом
Вы