Swift - Enumerazioni
Un'enumerazione è un tipo di dati definito dall'utente costituito da un insieme di valori correlati. Parola chiaveenum viene utilizzato per definire il tipo di dati enumerato.
Funzionalità di enumerazione
L'enumerazione in Swift 4 ricorda anche la struttura di C e dell'Obiettivo C.
È dichiarato in una classe e ai suoi valori si accede tramite l'istanza di quella classe.
Il valore del membro iniziale viene definito utilizzando gli intializzatori enum.
La sua funzionalità viene estesa anche garantendo la funzionalità del protocollo standard.
Sintassi
Le enumerazioni vengono introdotte con la parola chiave enum e collocano la loro intera definizione all'interno di un paio di parentesi graffe -
enum enumname {
// enumeration values are described here
}
Ad esempio, è possibile definire un'enumerazione per i giorni della settimana come segue:
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
Esempio
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Welcome to Closures
L'enumerazione Swift 4 non assegna ai suoi membri il valore predefinito come C e Objective C. Invece i membri sono definiti esplicitamente dai loro nomi di enumerazione. Il nome dell'enumerazione deve iniziare con una lettera maiuscola (Es: enum DaysofaWeek).
var weekDay = DaysofaWeek.Sunday
Qui il nome dell'enumerazione 'DaysofaWeek' è assegnato a un giorno della settimana variabile. Informa il compilatore che il tipo di dati appartiene a Sunday verrà assegnato ai successivi membri enum di quella particolare classe. Una volta definito il tipo di dati del membro enum, è possibile accedere ai membri passando valori e ulteriori calcoli.
Enumerazione con istruzione Switch
Anche l'istruzione "Switch" di Swift 4 segue la selezione a più vie. Si accede a una sola variabile in un determinato momento in base alla condizione specificata. Il caso predefinito nell'istruzione switch viene utilizzato per intercettare casi non specificati.
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Climate is Cold
Il programma definisce innanzitutto Climate come nome dell'enumerazione. Quindi i suoi membri come "India", "America", "Africa" e "Australia" vengono dichiarati appartenenti alla classe "Clima". Ora il membro America è assegnato a una variabile stagionale. Inoltre, Switch case vedrà i valori corrispondenti a .America e si diramerà a quella particolare istruzione. L'output verrà visualizzato come "Climate is Cold". Allo stesso modo è possibile accedere a tutti i membri tramite istruzioni switch. Quando la condizione non è soddisfatta, stampa per impostazione predefinita "Il clima non è prevedibile".
L'enumerazione può essere ulteriormente classificata in valori associati e valori grezzi.
Differenza tra valori associati e valori grezzi
Valori associati | Valori grezzi |
Tipi di dati diversi | Stessi tipi di dati |
Es: enum {10,0.8, "Hello"} | Es: enum {10,35,50} |
I valori vengono creati in base a una costante o una variabile | Valori prepopolati |
Varia ogni volta che viene dichiarato | Il valore per il membro è lo stesso |
Enum con valori associati
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Student Marks are: 98,97,95.
Si consideri ad esempio per accedere al nome degli studenti e ai voti assicurati in tre materie il nome dell'enumerazione è dichiarato come studente e i membri presenti in enum class sono il nome che appartiene al tipo di dati stringa, i voti sono rappresentati come mark1, mark2 e mark3 del tipo di dati Integer. Per accedere al nome dello studente o ai voti che hanno ottenuto
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
Ora, lo switch case stamperà il nome dello studente se quel blocco di case viene eseguito altrimenti stamperà i voti garantiti dallo studente. Se entrambe le condizioni falliscono, verrà eseguito il blocco predefinito.
Enum con valori grezzi
I valori non elaborati possono essere stringhe, caratteri o qualsiasi tipo di numero intero o in virgola mobile. Ogni valore non elaborato deve essere univoco all'interno della sua dichiarazione di enumerazione. Quando vengono utilizzati numeri interi per i valori non elaborati, vengono incrementati automaticamente se non viene specificato alcun valore per alcuni membri dell'enumerazione.
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Value of the Month is: 5.