Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Suggerimento veloce: Enumerazioni in Swift

by
Difficulty:BeginnerLength:ShortLanguages:

Italian (Italiano) translation by Mirko Pizii (you can also view the original English article)

Le enumerazioni sono un modello di progettazione comune in molti linguaggi di programmazione. Mentre potresti essere famigliare con le enumerazioni in C e Objective-C, l'implementazione di Swift delle enumerazioni è molto più potente e flessibile. In questo breve suggerimento, imparerai cosa c'è di speciale delle enumerazioni in Swift, come usarle nei tuoi progetti e cosa li rende così potenti.

1. Cos'è una enumerazione?

Le enumerazioni non sono una cosa nuova e certamente non sono una cosa unica di Swift. Tuttavia, se sei famigliare con le enumerazioni in C, allora andrai ad amare ciò che offre Swift con le enumerazioni.

Se le enumerazioni sono una cosa nuova per te, allora non sei famigliare con quanto hanno da offrire. In Swift, le enumerazioni sono la prima classe di tipi che definisce una lista di possibili valori per questo tipo.

Un esempio può essere un possibile stato di una connessione di rete. I possibili stati possono essere:

  • Disconnesso
  • In connessione
  • Connesso

Potremmo aggiungere un quarto stato per il caso dello stato sconosciuto. Con questo esempio in mente, andiamo a vedere come definire e implementare un esempio di enumerazione.

Nozioni di base

Come ho detto, le enumerazioni sono la prima classe di tipi in Swift. Una definizione dell'enumerazioni sembra molto simile ad una classe o definizione di struttura. Nell'esempio sotto, definiamo l'enumerazione ConnectionState.

Il nome dell'enumerazione è preceduta dalla parola enum ed è seguito da una coppia di parentesi graffe. L'enumerazione ConnectionState definirà i possibili stati di una connessione di rete. Per definire questi stati, aggiungiamo dei valori dei membri o membri alla definizione delle enumerazioni. La definizione di un valore di un membro comincia sempre con la parola chiave case.

In C o Objective-C, l'enumerazione sopra è leggermente diverso come illustrato nell'esempio sotto. Ogni valore della enumerazione corrisponde ad un intero, per esempio, ConnectionStateUnknown è uguale a 0, ConnectionStateDisconnected è uguale a 1, e così via.

Questo non è vero in Swift. I membri della enumerazione non corrispondono automaticamente ad un valore intero. I membri della enumerazione ConnectionState sono valori a se stessi e sono di tipo ConnectionState. Questo l'enumerazione più sicura e più esplicita.

Valori grezzi

E' possibile specificare esplicitamente dei valori ai membri di una enumerazione. Nel seguente esempio, i membri di una enumerazione ConnectionState hanno un valore grezzo di tipo Int. Ad ogni membro è assegnato un valore grezzo, corrispondente ad un intero.

Nota che specifichiamo il tipo dei valori grezzi nella definizione della enumerazione e che due valori dei membri non possono avere lo stesso valore grezzo. Se specifichiamo un valore solamente al membro Unknown, allora Swift incrementerà automaticamente il valore del membro Unknown e assegnerà dei valori unici agli altri membri della enumerazione. Per illustrare meglio, l'esempio sotto è identico alla precedente definizione della enumerazione ConnectionState.

2. Lavorare con le enumerazioni

Inizializzazione

Usare l'enumerazione ConnectionState è simile ad usare qualsiasi altro tipo in Swift. Nel prossimo esempio, dichiariamo una variabile, connectionState, e impostiamo il suo valore a ConnectionState.Connecting.

Il valore di connectionState è ConnectionState.Connecting e la variabile è di tipo ConnectionState.

Il tipo di inferenza di Swift è veramente conveniente quando lavoriamo con le enumerazioni. Perché abbiamo dichiarato connectionState ad essere di tipo ConnectionState, possiamo ora assegnare un nuovo valore usando l'abbreviazione della sintassi del punto per le enumerazioni.

Flusso di controllo

Usare le enumerazioni in una dichiarazione if o switch è corretto. Ricorda che la dichiarazione switch ha bisogno di essere esaustiva. Aggiungi un caso default se necessario.

Il seguente esempio dimostra come l'enumerazione ConnectionState può essere usata. Mostra anche come accedere al valore associato di un membro della enumerazione. La funzione canConnect accetta un'instanza ConnectionState e ritorna un Bool.

La funzione canConnect ritorna solo true se l'istanza ConnectionState passata alla funzione è uguale a .Connected e se il suo valore associato è un Int uguale a 3000. Nota che il valore associato del membro Connected è disponibile nella dichiarazione switch come una costante nominata port, che possiamo poi usare nel corrispondente case.

3. Valori associati

Un'altra interessante caratteristica delle enumerazioni di Swift sono i valori associati. Ogni membro di una enumerazione può avere un valore associato. I valori associati sono davvero flessibili. Per esempio, i valori associati di diversi membri della stessa enumerazione non hanno bisogno di essere dello stesso tipo. Dai un'occhiata al seguente esempio per capire meglio il concetto dei valori associati.

I membri Unknown e Disconnected non hanno un valore associato. Il membro Connecting ha un valore di tipo associato (Int, Double), specificando il numero di porta e un intervallo di timeout della connessione. Il membro Connected ha un valore di tipo associato Int, specificando il numero di porta.

E' importante per capire che un valore associato è collegato o associato con un membro di un'enumerazione. Il valore di un membro rimane invariato. L'esempio successivo illustra come creare un'istanza ConnectionState con un valore associato.

4. Metodi e tipi di valore

Metodi

Le enumerazioni sono davvero potenti in Swift. Le enumerazioni possono anche definire dei metodi, come un inizializzatore per selezionare un valore di un membro predefinito se non è stato specificato.

In questo esempio, inizializziamo un'istanza della enumerazione ConnectionState senza specificare esplicitamente un valore. Nell'inizializzatore della enumerazione, tuttavia, impostiamo l'istanza a Unknown. Il risultato è che la variabile connectionState è uguale a ConnectionState.Unknown.

Tipi di valore

Come le strutture, le enumerazioni sono dei tipi di valore, che significa che una enumerazione non è passata per referenza, come le istanze di classe, ma per valore. Il seguente esempio lo illustra.

Anche se assegniamo connectionState1 a connectionState2, i valori di connectionState1 e connectionState2 sono diversi alla fine dell'esempio.

Quando connectionState1 viene assegnato a connectionState2, Swift crea una copia di connectionState1 e lo assegna a connectionState2. In altre parole, connectionState1 e connectionState2 si riferiscono a due instanze diverse di ConnectionState.

Conclusione

Le enumerazioni in Swift sono incredibilmente potenti se confrontate, per esempio, con le enumerazioni in C. Uno degli aspetti più potenti delle enumerazioni è che sono la prima classe di tipi in Swift. Tipo di sicurezza è un aspetto fondamentale del linguaggio Swift e le enumerazioni si adattano perfettamente a questa mentalità.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.