English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift-Enum

枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。

Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为:

  • 它声明在类中,可以通过实例化类来访问它的值。

  • 枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。

  • 可以遵守协议(protocols)来提供标准的功能。

语法

Swift 中使用 enum 关键字来创建枚举并且把它们的整个定义放在一对大括号内:

enum enumname {
   // 枚举定义放在这里
}

例如我们定义以下表示星期的枚举:

import Cocoa
// 枚举定义
enum DaysOfWeek {
    case .Sunday
    case .Monday
    case .TUESDAY
    case .WEDNESDAY
    case .THURSDAY
    case .FRIDAY
    case .Saturday
}
Typ.
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("Sonntag")
case .Monday:
    print("Montag")
case .TUESDAY:
    print("Dienstag")
case .WEDNESDAY:
    print("Mittwoch")
case .THURSDAY:
    print("Donnerstag")
case .FRIDAY:
    print("Freitag")
case .Saturday:
    case .Saturday:
}

Das Ausgabergebnis des obigen Programms ist:

print("Samstag")

Donnerstag beispiel,werden nicht implizit inSundaywerden nicht implizit in,……Monday(wie)ist der Wert dieses EnumsMitgliedswert(oderMitglied)case

Schlüsselwörter kennzeichnen, dass ein neuer Enum-Wert definiert wird. Hinweis:-und C und ObjectiveDaysofaWeekC unterscheidet sich von Swift, bei dem Enum-Mitglieder beim Erstellen nicht einen vorgegebenen Integer-Wert zugewiesen bekommen.beispiel,werden nicht implizit inSundaywerden nicht implizit in,……MondaySaturday0werden nicht implizit in1werden nicht implizit in,……6undDaysofaWeek. Im Gegensatz dazu haben diese Enum-Mitglieder selbst vollständige Werte, die bereits genau definiert sind

Typ.

weekDayvar weekDay = DaysofaWeek.THURSDAYDaysofaWeekwert aus einer möglichen Initialisierung abgeleitet. SobaldweekDaydeklariert wurdeDaysofaWeek, können Sie eine Abkürzungssyntax (.) verwenden, um ihn in einen anderenDaysofaWeekWert:

var weekDay = .THURSDAY

wennweekDaywenn der Typ bekannt ist, kann der Enum-Name beim erneuten Zuweisen weggelassen werden. Enum-Werte mit explizitem Typ können den Code besser lesbar machen.

Enums können in zugehörige Werte und ursprüngliche Werte unterteilt werden.

Unterschied zwischen zugehörigen Werten und ursprünglichen Werten

Zugehörige WerteBasistyp
Verschiedene DatenartenGleiche Datenart
Beispiel: enum {10,0.8,"Hello"Beispiel: enum {10,35,50}
Der Wert der Erstellung basiert auf Konstanten oder VariablenVorgefüllte Werte
Zugehörige Werte werden dann gesetzt, wenn neue Konstanten oder Variablen auf der Grundlage von Enum-Mitgliedern erstellt werden, und ihr Wert kann sich jedes Mal ändern, wenn dies geschieht.Die ursprünglichen Werte sind stets gleich.

Zugehörige Werte

In diesem Beispiel definieren wir einen benannten Enum-Typ namens Student, der sowohl ein String (String) als auch ein entsprechender Wert (Int,Int,Int) sein kann.

import Cocoa
enum \(Student{
    case \(Name(String)
    case \(Mark(Int,Int,Int)
}
var \(studDetails) = \(Student.Name("w3codebox)
var \(studMarks) = \(Student.Mark(\(Student98,97,95}
switch \(studMarks) {
case \(studName)(\(studName):
    print("学生的名字是: \(studName)。")
case \(Mark(\(Mark1, \(Mark2, \(Mark3):
    print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。)
}

Das Ausgabergebnis des obigen Programms ist:

Die Noten der Schüler sind: 98,97,95.

Basistyp

Die Basistypen können Zeichenfolgen, Zeichen oder jeder Ganzzahl- oder Fließkommawert sein. Jeder Basistyp muss in der Enum-Deklaration einzigartig sein.

Bei Enums mit Integer-Basistypen müssen keine Werte für jeden Mitgliedsamen explizit zugewiesen werden. Swift weist sie automatisch zu.

Zum Beispiel wird der Wert der impliziten Zuweisung bei der Verwendung von Ganzzahlen als Basistyp schrittweise erhöht.1. Wenn der erste Wert nicht initialisiert wird, wird er automatisch auf 0 gesetzt.

import Cocoa
enum Month: Int {
    case January = 1, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
}
let yearMonth = Month.May.rawValue
print("Der Monat in Ziffern ist: \(yearMonth).")

Das Ausgabergebnis des obigen Programms ist:

Der Monat in Ziffern ist: 5.