Swift - wyliczenia

Wyliczenie to typ danych zdefiniowany przez użytkownika, który składa się z zestawu powiązanych wartości. Słowo kluczoweenum służy do zdefiniowania wyliczeniowego typu danych.

Funkcjonalność wyliczania

Wyliczenie w Swift 4 również przypomina strukturę C i Objective C.

  • Jest zadeklarowana w klasie, a jej wartości są dostępne za pośrednictwem instancji tej klasy.

  • Początkowa wartość elementu członkowskiego jest definiowana przy użyciu funkcji inicjujących wyliczenia.

  • Jego funkcjonalność jest również rozszerzona poprzez zapewnienie standardowej funkcjonalności protokołu.

Składnia

Wyliczenia są wprowadzane za pomocą słowa kluczowego enum i umieszczają całą ich definicję w parze nawiasów klamrowych -

enum enumname {
   // enumeration values are described here
}

Na przykład możesz zdefiniować wyliczenie dla dni tygodnia w następujący sposób -

enum DaysofaWeek {
   case Sunday
   case Monday
   ---
   case Saturday
}

Przykład

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")
}

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Welcome to Closures

Wyliczenie Swift 4 nie przypisuje swoim członkom wartości domyślnej, takiej jak C i Objective C. Zamiast tego członkowie są jawnie definiowani przez ich nazwy wyliczeniowe. Nazwa wyliczenia powinna zaczynać się wielką literą (np. Wyliczenie DaysofaWeek).

var weekDay = DaysofaWeek.Sunday

Tutaj nazwa wyliczenia „DaysofaWeek” jest przypisana do zmiennej weekday.Sunday. Informuje kompilator, że typ danych należący do Sunday zostanie przypisany kolejnym członkom wyliczenia tej konkretnej klasy. Po zdefiniowaniu typu danych elementu członkowskiego wyliczenia dostęp do elementów członkowskich można uzyskać, przekazując wartości i wykonując dalsze obliczenia.

Wyliczenie za pomocą instrukcji Switch

Instrukcja Swift 4 „Switch” jest również następująca po wyborze wielostronnym. Dostęp do tylko jednej zmiennej jest możliwy w określonym czasie na podstawie określonego warunku. Domyślny przypadek w instrukcji switch służy do przechwytywania nieokreślonych przypadków.

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")
   
}

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Climate is Cold

Program najpierw definiuje Climate jako nazwę wyliczenia. Następnie jego członkowie, tacy jak „Indie”, „Ameryka”, „Afryka” i „Australia”, zostają uznani za należących do klasy „Klimat”. Teraz członek America jest przypisany do zmiennej sezonowej. Co więcej, przypadek przełącznika zobaczy wartości odpowiadające .America i przejdzie do tej konkretnej instrukcji. Wynik zostanie wyświetlony jako „Klimat jest zimny”. Podobnie, dostęp do wszystkich członków można uzyskać za pomocą instrukcji przełącznika. Gdy warunek nie jest spełniony, domyślnie drukowany jest komunikat „Klimat nie jest przewidywalny”.

Wyliczenie można dalej sklasyfikować na powiązane wartości i wartości surowe.

Różnica między wartościami skojarzonymi a wartościami surowymi

Powiązane wartości Surowe wartości
Różne typy danych Te same typy danych
Np .: wyliczenie {10,0.8, „Cześć”} Np .: wyliczenie {10,35,50}
Wartości są tworzone na podstawie stałej lub zmiennej Wstępnie wypełnione wartości
Różni się za każdym razem Wartość dla członka jest taka sama

Wyliczenie z powiązanymi wartościami

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).")
}

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Student Marks are: 98,97,95.

Rozważmy na przykład, aby uzyskać dostęp do nazwisk uczniów i ocen zabezpieczonych w trzech przedmiotach wyliczenie nazwa jest zadeklarowana jako student, a członkowie obecni w klasie enum to nazwa należąca do typu string, znaki są reprezentowane jako mark1, mark2 i mark3 typu danych Integer. Aby uzyskać dostęp do nazwiska ucznia lub ocen, które otrzymali

var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)

Teraz obudowa przełącznika wydrukuje nazwisko ucznia, jeśli ten blok przypadku zostanie wykonany, w przeciwnym razie wydrukuje znaki zabezpieczone przez ucznia. Jeśli oba warunki nie spełnią się, zostanie wykonany blok domyślny.

Wyliczenie z wartościami surowymi

Nieprzetworzone wartości mogą być łańcuchami, znakami lub dowolnym typem liczb całkowitych lub zmiennoprzecinkowych. Każda wartość surowa musi być unikalna w ramach swojej deklaracji wyliczenia. Gdy liczby całkowite są używane dla wartości surowych, są one automatycznie zwiększane, jeśli dla niektórych elementów członkowskich wyliczenia nie określono żadnej wartości.

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).")

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Value of the Month is: 5.