IOS - Swift

swift 기초문법 - enum

게게겍 2022. 9. 12. 23:18

📖 enum이란

📌 enum (열거형)

같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형

💬 열거라는 뜻을 가진 Enumeration에서 따온 용어입니다. 한글로 번역할 때에는 열거형이라는 말을 많이 사용합니다.


📖 enum 정의하기

📌 값이 없는 경우

  • 두 가지 표현 방법이 있다.

enum 명칭 { case n1, n2, n3 ... }

enum 명칭 { case n1, case n2, case n3 ... }

ex) 학교 - 초, 중, 고

enum School {

    case elementary
    case middle
    case high
 }
  • 실제 사용 : . 을 붙혀서 사용
 

 

let yourSchool = School.high print("yourSchool: \(yourSchool)")

 

⭐️ 주의사항 : 변경되는 값(변수)은 var ↔️ 변경되지 않는 값(상수)은 let


Enum은 원시값을 가지지 않을 수도 있다. 원시값을 가져야 할 필요가 없다면 굳이 만들지 않아도 가능하다.

enum Spoon {
  case dirt
  case bronze
  case silver
  case gold

  func simpleDescription() -> String {
    switch self {
    case .dirt:
      return "흙수저"
    case .bronze:
      return "동수저"
    case .silver:
      return "은수저"
    case .gold:
      return "금수저"
    }
  }
}

Enum을 예측할 수 있다면 Enum의 이름을 생략할 수 있다. 그렇게 될 경우에는, 코드가 굉장히 간결해 질 수 있다.

let spoon: Spoon = .gold // 변수에 타입 어노테이션이 있기 때문에 생략 가능

func doSomething(with spoon: Spoon) {
  // ...
}
doSomething(with: .silver) // 함수 정의에 타입 어노테이션이 있기 때문에 생략 가능

📌 값이 있는 경우

  • case에 원시값을 지정(Raw value)하고 싶을 때, 총 3가지 자료형 활용 가능함
  • 원시값Raw Value으로 가지도록 정의됨.

첫 번째 방법

enum 명칭 : 자료형 타입 { case n1 =  ... }

ex)

enum Grade : Int {
    case first = 1
    case second = 2
}
  • 실제 사용
let yourGrade = Grade.second
print("yourGrade : \(yourGrade)")

>>> yourGrade : second
  • case의 값만 데리고 오고 싶은 경우 : .rawValue
print("yourGrade : \(yourGrade.rawValue)")

>>> yourGrade : 2

두 번째 방법

enum 명칭 { case n1( 입력할 값은... : 자료형 ) ... }

ex)

enum SchoolDetail1 {
    case elementary(name: String) // 데이터 지정
    case middle(name: String)
    case high(name: String)
}
  • 실제 사용
let yourMiddleSchoolName = SchoolDetail1.middle(name: "코더중학교")
print("yourMiddleSchoolName: \(yourMiddleSchoolName)")

>>> yourMiddleSchoolName: middle(name: "코더중학교")
  • case의 값만 데리고 오고 싶은 경우 : 메서드를 만든다

ex)

enum SchoolDetail {
    case elementary(name: String)
    case middle(name: String)
    case high(name: String)
    
    func getName() -> String { // 메서드 (함수)
        switch self {
        case .elementary(let name): // 1. 이렇게 쓰거나
            return name 
            
        case let .middle(name): // 2. 이렇게 쓸 수도 있다
            return name 
        case .high(let name):
            return name 
        }
    }
}
  • 실제 사용
let yourMiddleSchoolName = SchoolDetail.middle(name: "코더중학교")

print("yourMiddleSchoolName: \(yourMiddleSchoolName.getName())")

>>> yourMiddleSchoolName: 코더중학교

https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-3/enums.html

참고자료