Die Anleitung zu Swift Enum

1- Was ist Swift Enum?

Im  Swift benutzen wir den Schlüsselwort enum um eine Kollektion der Menge von den festen und listierten Elemente zu definieren. Sie können nicht hinzufügen oder vermindern. Zum Beispiel, Sie können eine Kollektion der Wochentage (Montag, Dienstag... Sonntag) definieren
Ohne  enum können Sie 7 Konstante für die Vertretung der Wochentage definieren um eine Kollektion der Wochentag zu schaffen
WeekDayConstants.swift
import Foundation



// Defines the constants are the days of the week.


let CONST_MONDAY = 2;
let CONST_TUESDAY = 3;
let CONST_WEDNESDAY = 4;
let CONST_THURSDAY = 5;

let CONST_FRIDAY = 6;
let CONST_ATURDAY = 7;
let CONST_SUNDAY = 1;
Eine Funktion bezeichnet eine Aufgabe für jeden Tag in einer Woche (wie ein Zeitplan) 
GetJobByDay.swift
import Foundation


// Returns name of Job will do

func getJobByDay(dayInWeek: Int) -> String {
   
    if (dayInWeek == CONST_SATURDAY
        || dayInWeek == CONST_SUNDAY) {
        return "Nothing";
    }
    return "Coding";
   
}
Wir können sehen, dass die Code wie oben nicht sicher ist. Zum Beispiel wenn Sie die Wert für die Wochentage vielleicht zusammentreffend eingeben, oder die Aufruf der Funktion getJobByDay(Int) aber die Übertragung der Wert außer der vorher definierten Wert.
  1. Kein sicheres Typ: zum ersten ist es kein sicheres Typ. Sie können die Methode getJobByDay(Int) aufrufen und eine Int Wert übertragen.
  2. Keine Bedeutung im Drucken: Wenn Sie die Wochentage ausdrucken möchten, erscheinen Sie die Nummer, nicht die Wort wie  "MONDAY"
Und hier ist das die Erstellung vom enum, ein besondere Kollektion
WeekDay.swift
import Foundation

// Define an Enumeration.
enum WeekDay
{
    // Elements
    case MONDAY
    case TUESDAY
    case WEDNESDAY
    case THURSDAY
    case FRIDAY
    case SATURDAY
    case SUNDAY
    
}
Das Beispiel von der Benutzung vom   Enum:
WeekDayTest.swift
import Foundation


// Returns name of Job will do
func getJob(weekDay: WeekDay) -> String  {
   
    if (weekDay == WeekDay.SATURDAY || weekDay == WeekDay.SUNDAY) {
       
        return "Nothing"
       
    }
    return "Coding"
   
}

func test_getJob()   {
   
    var weekDay = WeekDay.TUESDAY
   
    print("Day = \(weekDay)")
   
    var job = getJob(weekDay)
   
    print("Job = \(job)")
   
}
 

2- Die Elemente vom Enum browsen

Es gibt keine verfügbare Funktion oder Methode, damit Sie die Elementsliste eines Enum nehmen dürfen. Aber Sie können eine Variable für die Enthaltung alles Elementen vom Enum
Das folgende Beispiel definiert ein  Enum. In diesem  Enum wird die Konstante für die Enthaltung seines allen Elemente definiert
Season.swift
import Foundation

// The seasons
enum Season  {
   
    case Spring
   
    case Summer
   
    case Autumn
   
    case Winter
   
   
    // Static Constant, contains all the elements of the Enum.
    static let allValues = [Spring, Summer, Autumn, Winter]
   
   
}
 
GetAllSeasons.swift
import Foundation



func test_getAllSeasons()   {
 
 
   for season in Season.allValues  {
       print(season)
   }
 
}
Das Ergebnis vom BEispiel

3- Enum in dem Befehl switch

Es ist so gleich wie die primitive Daten ( Int, Float,..), dass  Enum als ein Parameter im Befehl switch benutzt wird.
Sehen Sie ein Beispiel:
SwitchDemo.swift
import Foundation


func test_switchEnum() {
   
    var day = WeekDay.THURSDAY;
   
    switch (day) {
       
    case .MONDAY:
       
        print("Working day");
       
    case .SATURDAY, .SUNDAY :
       
        print("Holiday");
       
    default:
        print(day);
       
    }
   
}
 
Die Kode vom  main.swift ändern
main.swift
import Foundation

test_switchEnum()
Das Beispiel durchlaufen

4- Enum mit dem rohen Werte  (raw value)

Sie können ein Enum mit der rohen Wert (raw values) definieren. Und die rohen Werte können die Typ vom S tring, character, Int, Number,...sein. Ein solche  Enum verbreiten ein der Type  String, Character, Int,..

Zum Beispiel: Sie können ein Enum als die Kollektion der Monate des Jahres defininieren. Die Kollektion enthaltet die rohen Werten vom 1 bis zum 12
RawValueEnum.swift
import Foundation

// Define an Enum is enumeration of months in year.
// It extends from Int
enum Month : Int  {
    
    // Assign the value (raw value) for the element.
    // (If the element is not assigned the value,
    // Default its value equal to the value of the previous element plus 1).
    case January = 1,
    
    February, March, April, May, June,
    
    July, August, September, October, November, December
    
    // Static Constant contains all the values of Month enum.
    static let allValues = [January,February, March,
                            April, May, June, July, August,
                            September, October, November, December]
    
}

//

enum Suit:String {
    
    case Spades = "♠"
    
    case Hearts = "♥"
    
    case Diamonds = "♦"
    
    case Clubs = "♣"
    
    // Static Constant contains all the values of Suit enum.
    static let allValues = [Spades,Hearts,Diamonds,Clubs]
    
}
die Elemente vom enum Month und die entsprechenden rohen Wert  ( raw value) ausdrucken
RawValueEnumTest.swift
import Foundation


func test_MonthEnum()   {
    
    // Print out all elements and raw values of enum.
    
    print("All element/raw value of Month enum");
    
    for e in Month.allValues  {
        
        let rawValue = e.rawValue
        
        print("Element \(e), raw value: \(rawValue)"  );
    }

    print("---------------------");
    
    // Print out all elements and raw values of enum.
    
    print("All element/raw value of Suit enum");
    
    for e in Suit.allValues  {
        
        let rawValue = e.rawValue
        
        print("Element \(e), raw value: \(rawValue)"  );
    }
    
}
Das Beispiel durchführen

5- Enum mit der verbunden Werte

Sie können ein Enum mit der Elemente, die die verbundene Werte enthalten, erstellen
Ich gebe eine Situation: Sie erstellen ein Enum,das die Promotionstyp enthaltet
  1. GIFT: das Geschenk schenken
  2. DISCOUNT: die Rabattierung
  3. MONEY: Geld schenken/geben
  4. SHIPPING: kostenloser Transport
Das Problem liegt, dass eine Promotionsform hat seine Verbindungswert, zum Beispiel der Form von Geschenk ( GIFT) : was für das Geschenk, und die Menge des Geschenk. Oder Gelb schenken ( MONEY) : wieviel Gelb,...

Deshalb hat jeder Element vom Enum den unterschiedlichen Parameter. Sehen Sie das Beispiel
Promotion.swift
import Foundation

// Promotion types
enum Promotion   {
    
    //
    case GIFT (name: String, quantity: Int)
    
    // Discount (percel: 0 - 100)
    case DISCOUNT(percent: Int)
    
    //
    case MONEY(amount : Int)
    
    // Free shipping
    case SHIPPING
    
}
Enum Promotion hat nur 4 Elemente. Sie können seine Elemente nicht ergänzen oder hinzufügen. Und die Verbindungswerte des Element werden beim Laufen des Programm bestimmt 
PromotionTest.swift
import Foundation

// Simulate a purchase, and get promotions.
func getRandomPromotion() -> Promotion {
    
    // A random value
    var random: UInt32 = arc4random()
    
    // Divided by 4 and returns the remainder (0, 1, 2, 3).
    random = random % 4
    
    switch random  {
        
    case 0:
        return Promotion.DISCOUNT(percent: 10)
    case 1:
        return Promotion.GIFT(name: "Doll", quantity: 1)
    case 2:
        return Promotion.MONEY(amount: 100)
    case 3:
        return Promotion.SHIPPING
    default:
        return Promotion.SHIPPING
    }
    
}


func test_Promotion()   {
   
    
    var myProm = getRandomPromotion()
    
    print("Get Promotion: \(myProm)")
    
    
    switch myProm {
    case .DISCOUNT(let percent):
        print("Percent is: \(percent)")
    case .GIFT(let name, let quantity ):
        print("Gift name: \(name), quantity: \(quantity)")
    case .MONEY(let amount) :
        print("Amount: \(amount)")
    default:
        print(myProm)
    }
}
 
main.swift ändern
main.swift
import Foundation

test_Promotion()
Das Beispiel durchführen

6- Die Methode im Enum

Sie können die Methode im Enum definieren. Sehen Sie das Beispiel
Currency.swift
import Foundation


// Currencies
enum Currency   {

    case USD
    case YEN
    case VND
    
    
    
    func description() -> String  {
        
        switch self {
        case USD:
            return "America's currency"
        case YEN:
            return "Japan's currency"
        case VND :
            return "Vietnam's currency"
        }
    }
    
}

View more categories: