티스토리 뷰
목차
- Enumerations (열거형)
- Raw Values (원시 값)
Enumerations (열거형)
Enumerations 사용하는 이유
-
코드의 가독성이 높아진다.
-
코드의 안전성이 높아진다.
// #A
// 나쁜 코드, 값이 변할수도 있고, 그 값이 뭔지 알기 힘듦
let left = 0
let center = 1
let right = 2
var alignment = center
// #B
// #A보다 가독성이 좋아졌으나, 여기에도 문자열이라 오타가 날 수 있음.
// swift는 대소문자를 구분하기때문에 정해야한다.
let left = "left"
let center = "center"
let right = "right"
var alignment = center
if alignment == "Center" {
}
Enumerations 선언
enum TypeName {
case caseName
case caseName, caseName
}
Enumerations 예시
enum Alignment {
case left
case right
case center
}
/*
leftAlignment, rightAlignment, centerAlignment 라고 쓰면 가독성이 높아질 거라
생각할 수 있는데 이미 열거형 이름을 통해서 정렬을 표현한다는 것을 파악할 수 있기 때문에
중복된 단어는 제거하고 가장 단순한 이름으로 선언한다.
*/
Alignment.center
// 'Alignment.' 열거형. 을 찍으면 자동완성에 case목록이 표시되어
// 열거형 표시를 보지 않더라도 어떤 case가 있는지 볼 수 있고 오타가 발생할 가능성이 적어진다.
var textAlignment = Alignment.center
// 열거형 case는 값이다.
textAlignment = .left
// 열거형을 이미 저장했기 때문에 case 이름만 적어도 된다. '.'은 꼭 찍어야 한다.
textAlignment = .Left
// error, 열거형에 선언한 case만 가능.
if textAlignment == .center {
}
// 열거형 case는 값이기 때문에 비교연산자로 비교한다.
switch textAlignment {
case .left:
print("left")
case .right:
print("right")
case . center:
print("center")
}
// 열거형 case는 if문 보다는 switch문으로 작성하는 게 좋다.
Raw Values (원시 값)
Enumerations은 그 자체로 독립적인 값이지만 내부에 또 다른 값을 저장할 수 있다. 이것을 Raw Values (원시 값)라고 한다. Raw Values은 필수사항이 아니기 때문에 없을 수도 있다.
Raw Values 선언
enum TypeName: RawValueType {
case caseName = value
}
// RawValueType - String, Character, Number Types
Raw Values: Int
enum Alignment: Int {
case left
case right
case center
}
Alignment.left.rawValue // 0
Alignment.right.rawValue // 1
Alignment.center.rawValue // 2
// case에 선언된 순서대로 0,1,2라고 되어있다.
enum Alignment: Int {
case left
case right = 100
case center
}
Alignment.left.rawValue // 0
Alignment.right.rawValue // 100
Alignment.center.rawValue // 101
// case에 선언된 순서대로 0,100,101라고 되어있다.
// 원시값을 직접 저장하면 이전 case에서 증가하는 값은 저장되지 않는다.
// 세번째 case에 저장된 값은 정하지 않으면 자동으로 저장되는 기준값은 항상 이전 값이다.
Alignment.left.rawValue = 10
// error, 선언 이후 원시값을 바꾸는 건 불가능하다.
Alignment(rawValue: 0) // left
Alignment(rawValue: 200) // nil, 이 값을 가진 case는 없다. optional
Raw Values: String
enum Weekday: String {
case sunday
case monday = "MON"
case tuesday
case wednesday
case thursday
case friday
case saturday
}
Weekday.sunday.rawValue // sunday
// 원시값의 자료형을 String으로 선언하고 원시값을 생략하면
// case 이름과 동일한 String(문자열)이 원시값으로 저장된다.
Weekday.monday.rawValue // MON
Raw Values: Character
enum ControChar: Character {
case tab = "\t"
case newLine = "\n"
}
// 원시값의 자료형을 Character로 선언한 경우에는 반드시 원시값을 직접 저장해야된다.
'Swift' 카테고리의 다른 글
[Swift] Structures and Classes (0) | 2021.03.08 |
---|---|
[Swift] Closure (0) | 2021.03.08 |
[Swift] Functions (함수) (0) | 2021.02.20 |
[Swift] Optionals (옵셔널) (0) | 2021.02.18 |
[Swift] Control Transfer Statements (흐름 제어 구문), Labeled Statements (구문 이름표) (0) | 2021.02.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 객체지향 생활체조
- 삼항연산자
- 비트연산자
- RawValues
- datatypes
- Functions
- 반복문
- 오토레이아웃
- 훈련법
- scope
- 범위연산자
- playground
- swift
- optional
- 옵셔널
- 산술연산자
- iOS View Life Cycle
- continue
- variables
- overflow
- 흐름제어구문
- labeled
- enumerations
- conditional
- 오버플로우연산자
- Constants
- 결합성
- 세자리수마다 콤마넣기
- 구문이름표
- 전산구문 기초용어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함