본문 바로가기
Smart Device/Swift

Swift Enumerations

by 언덕너머에 2014. 6. 29.

- Enumerations

enumeration은 enum 키워드로 만들 수 있다. enumeration은 Class와 같은 다른 형식들과 마찬가지로

자기자신과 관련된 Method를 가질 수 있다.


enum Rank: Int {

    case Ace = 1

    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten

    case Jack, Queen, King

    func simpleDescription() -> String {

        switch self {

        case .Ace:

            return "ace"

        case .Jack:

            return "jack"

        case .Queen:

            return "queen"

        case .King:

            return "king"

        default:

            return String(self.rawValue)

        }

    }

}

let ace = Rank.Ace

let aceRawValue = ace.rawValue


위의 예처럼 enumeration의 초기값이 Int이면 첫번째 원소에 초기값을 지정해야 한다.(Ace = 1)

나머지 초기값은 순서에 따라 할당된다. enumeration의 초기type에 String이나 Float을 사용할 수 있다.


Rank.Ace.toRow() --> 1


if let convertedRank = Rank.fromRaw(3) {

let threeDescription = convertRank.simpleDescription()

}


enumeration의 맴버 값들은 enumeration의 초기값을 작성하기 위한 다른 방법일 뿐만 아니라,

enumeration의 실제적인 값이기도 하다. 사실, 의미있는 초기 값이 아닌경우에 초기값을 제공하지 

않아도 된다.


enum Suit {

    case Spades, Hearts, Diamonds, Clubs

    func simpleDescription() -> String {

        switch self {

        case .Spades:

            return "spades"

        case .Hearts:

            return "hearts"

        case .Diamonds:

            return "diamonds"

        case .Clubs:

            return "clubs"

        }

    }

}

let hearts = Suit.Hearts

let heartsDescription = hearts.simpleDescription()


상수 hearts에 값을 할당할 때 열거형 맴버 Suit.Hearts는 hearts가 명확한 type을 가지지 않기 때문에 

전체명으로 참조되어야 한다. 반면에 switch문 안에 사용된 enumeration의 경우에는 이미 Suit로 

알려져 있기 때문에 .Hearts와 같이 단축명으로 사용될 수 있다. enumeration의 값 type을 알 수 있다면

언제라도 단축형으로 사용할 수 있다.


- associated value

enum Month {

case Jan(Int, String)

case Feb(Int, String)

case Mar(Int, String)

case Apr(Int, String)

case May(Int, String)

case Jun(Int, String)

case Jul(Int, String)

case Aug(Int, String)

case Sep(Int, String)

case Oct(Int, String)

case Nov(Int, String)

case Dec(Int, String)

}

var myMonth = Month.Mar(1, "삼일절")


switch myMonth {

case .Mar(let date, let msg):

println("3월 \(date)일은 \(msg)입니다.")

case .May(let date, let msg):

println("5월 \(date)일은 \(msg)입니다.")

case .Dec(let date, let msg):

println("12월 \(date)일은 \(msg)입니다.")

default :

println("평범한 하루 입니다.")

}

//--> 3 1일은 삼일절입니다.


- 열거형에 값 할당

열거형에는 기본적으로 맴버들에 대해 값이 할당되지 않는다. 하지만 열거형에 자료형을 명시해주면 값이 자동으로 

할당된다. 


예제)

enum Time : Int {

    case AM = 11

    case PM

}

//--> AM에 0이, PM에 1이 할당된다.


enum Time : Int {

    case AM = 11

    case PM

}

//--> AM에 11이, PM에 12가 할당된다.


var myTime = Time.AM

println("현재 시간은 \(myTime.rawValue)입니다.")

'Smart Device > Swift' 카테고리의 다른 글

Swift protocol  (0) 2014.07.03
Swift struct  (2) 2014.07.02
Swift Objects and Classes #3  (0) 2014.06.29
Swift Objects and Classes #2 - Properties getter setter  (0) 2014.06.24
Swift Numeric Types  (0) 2014.06.12