Swift 列挙型
簡単に言うと、列挙型もデータ型ですが、このデータ型には、カスタマイズされた特定のデータのみが含まれており、共通の特性を持つデータのコレクションです。
Swift の列挙は、Objective C および C の構造に似ています。列挙の機能は次のとおりです。
それはクラス内で宣言され、その値はクラスをインスタンス化することでアクセスできます。
列挙では、初期メンバー値を提供するコンストラクター (初期化子) を定義することもでき、その機能は元の実装に基づいて拡張できます。
プロトコルに準拠して標準機能を提供できます。
構文
Swift で enum キーワードを使用して列挙を作成し、その定義全体を中括弧のペア内に置きます:
enum enumname { // 枚举定义放在这里 }
たとえば、週を表す次の列挙を定義します:
import Cocoa // 定义枚举 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
型です。DaysofaWeek
例子中,Sunday
,Monday
,……
和Saturday
不会隐式地赋值为0
,1
,……
和6
。相反,这些枚举成员本身就有完备的值,这些值是已经明确定义好的DaysofaWeek
类型。
var weekDay = DaysofaWeek.THURSDAY
weekDay
的类型可以在它被DaysofaWeek
的一个可能值初始化时推断出来。一旦weekDay
被声明为一个DaysofaWeek
,你可以使用一个缩写语法(.)将其设置为另一个DaysofaWeek
的值:
var weekDay = .THURSDAY
当weekDay
import Cocoa enum Student{ case Name(String) case Mark(Int,Int,Int) } var studDetails = Student.Name("php") 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)。") }
weekDay
の型は、DaysofaWeek
の可能な値の 1 つで初期化されるときに推測できます。 weekDay
を DaysofaWeek
として宣言したら、短縮構文 (.) を使用して別の DaysofaWeek
の値に設定できます: 学生的成绩是: 98,97,95。
weekDay
の型がわかっている場合は、再度値を割り当てるときに列挙名を省略できます。明示的に型指定された列挙値を使用すると、コードが読みやすくなります。 列挙は、関連する値とプリミティブな値に分類できます。 相関値 | |
---|---|
異なるデータ型 | |
例: enum {10,0.8,"Hello"} | |
定数または変数に基づく値の作成 | |
関連する値は、列挙型メンバーに基づいて新しい定数または変数を作成する場合です。その値は、これを行うたびに異なる可能性があります。 |
関連値
次の例では、Student という名前の列挙型を定義します。これは、Name の関連値 (Int、Int、Int、Int)、または Mark 値の文字列型 (String) になります。
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。
元の値
元の値は、文字列、文字、または任意の整数または浮動小数点値です。各プリミティブ値は、その列挙宣言内で一意である必要があります。
元の値が整数の列挙である場合、各メンバーに明示的に値を割り当てる必要はなく、Swift が自動的に値を割り当てます。
上記のプログラムの実行の出力結果は次のとおりです:
rrreee