'Enum con valori associati' in Swift consentono a ciascun caso di memorizzare valori individuali (di diversi tipi). Tale enum diventa fondamentalmente un tipo di dato algebrico (Algebraic Data Type), che è ideale per esprimere un insieme finito di varianti con dati aggiuntivi diversi.
Utilizza questa costruzione:
Esempio di codice:
enum NetworkResult { case success(data: Data) case failure(error: Error) } func handle(result: NetworkResult) { switch result { case .success(let data): print("Dati ricevuti: \(data)") case .failure(let error): print("Errore: \(error.localizedDescription)") } }
È possibile creare enum all'interno di enum (enum annidati) e a cosa può servire?
Risposta: Sì, Swift supporta gli enum annidati. Questo è comodo per modellare stati annidati e garantire l'ambito. Ad esempio:
enum PaymentStatus { enum ErrorType { case declined, timeout } case success(amount: Double) case failure(type: ErrorType) }
Storia
In un progetto è stato implementato un modello di stato complesso per una richiesta tramite enum con valori associati, tuttavia, durante l'aggiunta di nuovi casi nello switch, la gestione del default non è stata implementata. Questo ha portato a errori silenziosi difficili da individuare a runtime, piuttosto che in fase di compilazione.
Storia
Uno sviluppatore ha tentato di serializzare direttamente un enum con valori associati in JSON. Senza supporto manuale di Codable per ogni caso, l'applicazione perdeva dati durante la decodifica, causando bug critici durante la sincronizzazione con il server.
Storia
Nella parte di rete per la trasmissione degli errori sono state utilizzate solo classi, invece di enum. Di conseguenza, l'elenco degli errori è cresciuto rapidamente, si sono verificati tipi duplicati e complicazioni nella manutenzione, a differenza della soluzione con enum, in cui l'elenco degli errori sarebbe stato type-safe e centralizzato.