English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
エnumは単純に言えば、データ型の一種ですが、このデータ型はカスタムの特定のデータを含みます。これは共通の特性を持つデータの集合です。
SwiftのエnumはObjective-CやCの構造体に似ており、エnumの機能は:
クラス内で宣言され、クラスの例示を通じて値にアクセスできます。
エnumは構造体(initializers)を定義して初期メンバー値を提供し、機能を拡張できます。
プロトコル(protocols)を守ることで標準の機能を提供できます。
Swiftでは、enumキーワードを使用してエnumを作成し、その全体の定義を一対の大括弧内に置きます:
enum enumname { // エnumの定義はここに置きます }
例えば、以下のように週を表すエnumを定義します:
import Cocoa // 定義エnum enum DaysofaWeek { case Sunday case Monday case TUESDAY case WEDNESDAY case THURSDAY case FRIDAY case Saturday } var weekDay = DaysofaWeek.THURSDAY weekDay = .THURSDAY switch weekDay { case .Sunday: print("星期天") case .Monday: print("星期一") case .TUESDAY: print("星期二") case .WEDNESDAY: print("星期三") case .THURSDAY: print("星期四") case .FRIDAY: print("星期五") case .Saturday: print("星期六") }
上記のプログラムの実行結果は:
星期四
枚举中定义的值(如 Sunday
,Monday
,……
和Saturday
)是这个枚举的成员值(或成员)。case
关键词表示一行新的成员值将被定义。
注意:
和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。在上面的DaysofaWeek
实例中,Sunday
,Monday
,……
和Saturday
不会隐式地赋值为0
,1
,……
和6
。相反,这些枚举成员本身就有完备的值,这些值是已经明确定义好的DaysofaWeek
类型。
var weekDay = DaysofaWeek.THURSDAY
weekDay
的类型可以在它被DaysofaWeek
的一个可能值初始化时推断出来。一旦weekDay
被声明为一个DaysofaWeek
,你可以使用一个缩写语法(.)将其设置为另一个DaysofaWeek
的值:
var weekDay = .THURSDAY
当weekDay
的类型已知时,再次为其赋值可以省略枚举名。使用显式类型的枚举值可以让代码具有更好的可读性。
枚举可分为相关值与原始值。
相关值 | 原始値 |
---|---|
不同数据类型 | 相同数据类型 |
示例: enum {10,0.8,"Hello" | 示例: enum {10,35,50} |
值的创建基于常量或变量 | 预先填充的值 |
相关值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的。 | 原始值始终是相同的 |
以下示例中我们定义一个名为 Student 的枚举类型,它可以是 Name 的一个字符串(String),或者是 Mark 的一个相关值(Int,Int,Int)。
import Cocoa enum Student{ case Name(String) case Mark(Int,Int,Int) } var studDetails = Student.Name("w3codebox) var studMarks = Student.Mark(98,97,95} switch studMarks { case .Name(let studName): print("学生的名字是: \(studName)。") case .Mark(let Mark1, let Mark2, let Mark3): print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。) }
上記のプログラムの実行結果は:
学生の成績は: 98,97,95。
原始値は文字列、文字、または整数や浮動小数点数などの値でできます。各原始値はそのエnum宣言の中でユニークでなければなりません。
原始値が整数の場合、各メンバーに明示的に値を割り当てる必要はありません。Swiftは自動的に値を割り当てます。
例えば、整数を使用する場合、暗黙的な割り当ての値は順次増加します。1。もし最初の値に初期値が割り当てられていない場合、自動的に0に設定されます。
import Cocoa enum Month: Int { case January = 1, February, March, April, May, June, July, August, September, October, November, December } let yearMonth = Month.May.rawValue print("数字の月が: \(yearMonth)。")
上記のプログラムの実行結果は:
数字の月が: 5。