Swift:基礎(十七)列挙

2984 ワード

Swift列挙
列挙は簡単に言えばデータ型でもありますが、このデータ型にはカスタムの特定のデータのみが含まれており、共通の特性を持つデータのセットです.
Swiftの列挙はObjective CとCの構造に似ており、列挙の機能は以下の通りである.
  • クラスに宣言され、クラスをインスタンス化してその値にアクセスできます.
  • の列挙は、初期メンバー値を提供するために構造関数(initializers)を定義することもできる.元の実装に基づいて機能を拡張できます.
  • は、標準的な機能を提供するためにプロトコル(protocols)を遵守することができる.

  • 構文
    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キーワードは、新しいメンバー値が定義されることを示します.
    注意:S wiftの列挙メンバーは、CとObjective-Cとは異なり、作成時にデフォルトの整数値が与えられません.上の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}
    値の作成定数または変数に基づく
    プリフィル値
    相関値は、列挙メンバーに基づく新しい定数または変数を作成するたびに設定され、そうするたびに値が異なる場合があります.
    元の値は常に同じです
    相関値
    次の例では、Nameの文字列(String)またはMarkの相関値(Int,Int,Int)であるStudentという列挙タイプを定義します.
    import Cocoa
    
    enum Student{
        case Name(String)
        case Mark(Int,Int,Int)
    }
    var studDetails = Student.Name("Runoob")
    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。
    

    元の値
    元の値は、文字列、文字、または任意の整数値または浮動小数点値です.各元の値は、その列挙宣言で一意である必要があります.
    元の値が整数の列挙では、各メンバーに明示的に値を割り当てる必要はありません.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。