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.