열거형
- 관련된 값으로
- 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 |
댓글