본문 바로가기
⌨️ Language/swift

[Swift] 열거형 (Enumerations)

by hyebin (Helia) 2022. 2. 8.

열거형

  • 관련된 값으로
  • case값으로 string, character, integer, floting 값들을 사용
  • 계산된 프로퍼티(computed properties)를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용 가능

열거형 문법

  • 원시 값(Raw Values)이 없는 열거형
enum CompassPoint {
    case north
    case south
    case east
    case west
}

//콤마(,)를 구분해 한줄로 정의
enum CompassPoint {
    case north, south, east, west
}

var directionToHead = CompassPoint.west
var directionToHead: CompassPoint = .west

 /*CompassPoint로 한번 정의되면 다음에 값을 할당할 때 형을 생략한 
 점 문법(dot syntax)을 이용해 값을 할당하는 축약형 문법을 사용 가능*/
directionToHead = .east
  • 원시 값(Raw Values)이 있는 열거형
    • Number type
//enum 선언 시 타입을 명시하면 첫 case부터 0부터 1씩 증가된 값으로 선언됨
enum Position: Int{
    case top		//0
    case right		//1
    case bottom		//2
    case left    	//3
}

//원시값 직접 지정, 원시값이 없는 case는 이전 case의 원시값에서 1 증가된 값으로 선언됨
enum Position: Int{
    case top = 1
    case right = 10
    case bottom    	//11
    case left = 20
}

//Double, Float타입으로 선언 시 원시값을 생략하려면 이전 case에 정수 입력해야 함
enum Position: Double{
    case top = 1.0		//1.0
    case right = 10.1	//10.1
    case bottom = 2		//2.0
    case left			//3.0
}
  • Charater type
//모든 case에 대한 원시값을 직접 선언해 주어야 함
enum Position: Character{
    case top = "t"
    case right = "r"
    case bottom = "b"
    case left = "l"
}
  • String type
//원시값을 생략한 경우 case 이름이 원시값으로 생성됨
enum Position: String{
    case top = "t"	//t
    case right		//right
    case bottom		//buttom
    case left = "l"	//l
}
  • 원시 값에 접근
print(Position.right.rawValue)	//right

//Raw Value를 통해서 열거형을 생성
var user = Position.init(rawValue: "l") //옵셔널 타입​

관련 값 (Associated Values)

  • case에 custom type의 추가적인 정보를 저장
  • 같은 형이지만, 다른 형태의 값을 갖는 case를 생성 가능
  • case옆에 tuple 형태로 type을 명시
//Named Tuple
enum Product{
    case smartphone(model: String, storage: Int)
    case computer(model: String, size: Int)
    case pad (model: String)
}

var produt: Product = .smartphone(model: "iphone", storage: 256)

//Unnamed Tuple
enum Product{
    case smartphone(String, Int)
    case computer(String, Int)
    case pad (String)
}

var product = Product.smartphone("iphone", 256)
  • switch-case문에서 활용
switch product{
case .pad("ipad"): break    //연관값이 ipad이면 매칭
case .pad: break            //연관값 무시
case .smartphone("iphone", _): break //연관값 생략 가능
case .smartphone(let model, let storage): break //연관값 상수(변수) 바인딩
case let .computer(model, size): break  //모든 연관값을 상수로 바인딩 시 let을 맨 앞으로 뺄 수 있음
}
반응형

'⌨️ Language > swift' 카테고리의 다른 글

[Swift] 클래스(Class)와 구조체(Struct)  (0) 2023.02.06
[Swift] 옵셔널 (Optional)  (0) 2023.02.06
[Swift] 함수(Functions)  (0) 2021.12.02
[Swift] 제어문(Control Flow)  (0) 2021.11.26
[Swift] 데이터 타입(2)  (0) 2021.11.25

댓글