Swift3(스위프트3)

swift3 스위프트3 열거형 enum

알통몬_ 2017. 7. 4. 16:26
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


이번 포스팅에서는 enum 열거형에 대해 공부하겠습니다.


enum 이름 {

     case name1

     case name2

     case name3, name4

}

enum 은 타입이기 때문에 첫 글자를 대문자로 선언해주어야 하고

각 case 들은 소문자로 정의합니다.

위처럼 case를 하나 씩 선언하거나 콤마로 구분하여 여러 개를 선언할 수 있고,

각 case는 그 자체가 고유 값입니다.

그리고 C나 java 처럼 각 값에 정수가 대입되지 않습니다.


ex)

   enum Seasons {

      case spring

      case summer

      case fall

      case winter

   }


   var season : Seasons = Seasons.spring

   위에서 season의 타입이 Seasons로 정의되어 있기 때문에

   아래처럼 사용할 수도 있습니다.

   season = .summer


그리고 열거형은 switch 문에서도 자주 사용되는데요.

모든 값들이 case 안에 들어가야 합니다.

그렇지 않다면, 가장 마지막에 default 를 정의해야 합니다.

   switch season {

      case .spring :

         print("봄이네요")

      case .summer :

         print("여름이네요")

      case .fall :

         print("가을이네요")

      case .winter :

         print("겨울이네요")

   }


C 나 Java 처럼 case 별로 정수 값을 가질 수도 있는데요.

원시값이라는 것을 사용하는 방법입니다.

   enum Seasons : Int {

      case spring = 0

      case summer = 1

      case fall

      case winter

   }

첫 번째 case 에만 0을 대입시켜주면 그 다음부터는 1씩 증가하며 정수값을 가집니다.


그리고 각 원시값을 가져오고 싶을 때는 아래처럼 사용가능합니다. => rawValue 사용

Seasons.spring.rawValue // 0


enum Seasons : String {

      case spring = "봄"

      case summer = "여름"

      case fall = "가을"

      case winter

}

Seasons.spring.rawValue // 봄

문자열이 원시 값으로 대입되었을 경우에는

각 case 마다 원시 값을 주어야 합니다.

그렇지 않으면 case의 값들을 가져옵니다.

Seasons.winter.rawValue // winter


그리고 원시 값을 통한 초기화도 할 수 있는데요.

rawValue를 통해 초기화할 수 있습니다.

* rawValue 를 통해 초기화를 한 인스턴스는 옵셔널 타입입니다.

let season : Seasons = Seasons(rawValue : 0) // X

let season : Seasons? = Seasons(rawValue : 0) // spring


메소드 추가도 가능합니다.


   enum Dozen {

      case one

      case two

      case three

      case four

      case five

      case six

      case seven, eight, nine, ten, eleven, twelve

    

      func overTen() {

          switch self {

          case one, two, three, four, five, six, seven, eight, nine, ten :

              print("10 이하입니다")

          case eleven, twelve :

              print("10초과입니다")

      }

}

   Dozen.ten.overTen() // 10 이하입니다


이상입니다.   


다음 포스팅에서는 값 타입과 참조 타입에 대해 공부하겠습니다.

반응형