iOS/문법

Swift 문법과 친해지기 - enum

HJ39 2022. 12. 23. 23:57

enum

swift는 C언어와 다르게 문자열, 정수형, 실수형 등 대부분의 타입을 지원한다.

 

  • enum 규칙
    • enum도 타입이므로 이름을 대문자로 작성한다.
    • 각 case들은 소문자로 작성한다.
    • 한 줄씩 작성해도 되고 쉼표로 구분하여 한 줄에 작성해도 상관없다.

□ enum 선언 예시

enum WeekDay{
    case mon
    case tue
    case wed
    case thu, fri, sat, sun
}

 

□ enum 사용 예시

var day: WeekDay = WeekDay.mon

print(day)

day = .fri

switch day{
case .mon, .tue, .wed, .thr:
    print("평일")
case .fri, .sat, .sun:
    print("주말")
}

enum을 호출할 때는 enum에 지정한 이름을 한 번 호출해 주어야 한다.

그 이후에는 '.'을 이용하여 접근 가능하다. (컴파일러가 똑똑해요ㅎ)

 

→ Switch-case를 사용하면 enum을 더욱더 효과적으로 사용할 수 있고 switch-case를 사용할 때 enum의 모든 case들을 다 쓰지 않는 경우 default값을 지정해야 한다.

 

다른 타입들을 적용하고 싶다면 다음과 같이 사용할 수 있다.

□ enum 다른 타입 사용 예시

enum Count: Double{
    case one = 1.1
    case two = 2.2
    case three = 3.3
    case four = 4.4
}

enum Str: String{
    case one = "one"
    case two = "two"
    case three = "three"
    case four = "four"
}

 

 

□ enum 사용 예시

print("One = \(Count.one.rawValue)") //one에 저장된 값 1.1 출력
print("One = \(Count.one)") // one 출력

let a :Count? = Count(rawValue: 1.1)	//rawValue인 경우 객체가 생성되지 않고 nil값 반환
print("a = \(a)!")	

// 옵셔널 바인딩 방법 | if-let
if let b = Count(rawValue: 2.2){	
    print("b = \(b)")
}

 

직접 지정 타입으로 사용할 때는 rawValue값이 없을 때도 있기 때문에 optional 타입을 생각해야 한다. 따라서 optional binding을 활용하여 optional을 해제해야 한다.

값이 지정되어 있지 않는 경우 출력할 때 case의 이름을 반환한다.

 

열거형 타입에 함수 넣기

열거형에 함수를 넣을 수 있는 것을 보고 놀랐다.

 

□ 예시

enum Month{
    case mar, apr, may
    case jun, jul, aug
    
    func printMonth(){
        switch self{
        case .mar, .apr,. may:
            print("봄")
        case .jun, .jul, .aug:
            print("여름")
        }
    }
}

Month.may.printMonth()

 


enum 사용하는 이유

  • 보기 쉬운 깔끔한 코드
  • 코드를 작성할 때 실수를 줄여준다.
  • 코드 작성이 편리해 진다.

 


 

# 참고한 사이트

  1. https://80000coding.oopy.io/59ad1d9b-e05f-4b24-af14-88c2b07c4b77
  2. https://soooprmx.com/enum/
  3. https://fomaios.tistory.com/entry/Swift-Enum%EC%97%B4%EA%B1%B0%ED%98%95%EC%9D%84-%EC%8D%A8%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0