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.