열거형(Enumerations)은 공통된 속성으로 이루어진 그룹을 자료형(type)으로 새롭게 만드는 것이다.
책으로 예를 들어보면,
책은 소설, 만화, 잡지, 인문 등등 책이라는 공통된 타입 안에서 여러 분류를 할 수 있다.
enum Books {
case fiction
case comics
case magazine
}
// 한 줄로 선언하기
enum Books {
case fiction, comics, magazine
}
enum 키워드를 사용해서 선언한 열거형은 'Books'이라는 새로운 자료형을 만든 것이다.
var myBook = Books.comics
var myBook2:Books? // 기본 타입을 정하지 않는 경우
myBookType 변수와 whatBookType 변수는 Books 타입으로 정의된다.
내가 고른 책에 대해 알아보기 위한 selBook이라는 함수를 정의했다.
입력받을 파라미터 book은 Books 타입을 갖게 된다.
book은 Books 타입이기 때문에 축약해서 작성할 수 있다.
. 온점을 찍으면 자동으로 Books 타입 케이스들을 보여준다.
위에서 선언했던 myBook, myBook2도 마찬가지로 Books 타입으로 정의했기 때문에 온점으로 축약형을 사용할 수 있다.
func selBook(book: Books) {
switch book {
case .fiction:
print("소설책입니다.")
case .comics:
print("만화책입니다.")
case .magazine:
print("잡지입니다.")
}
}
selBook(book: myBook)
enum은 스위치문을 통해 자주 사용된다.
selBook에 myBook을 파라미터로 넣어 호출하면 "만화책입니다."가 출력됨을 볼 수 있다.
단순한 분류도 필요하지만 각 케이스별로 값들을 입력할 수 있다.
enum Books2 {
case fiction(title: String, price: Int)
case comics(title: String, price: Int)
case magazine(title: String, price: Int)
}
새로운 열거형 Books2를 만들었다.
각 케이스별로 책 제목과 가격을 입력할 수 있다.
var bookList = [Books2]()
func selBook(book: Books2) {
bookList.append(book)
}
selBook(book: .comics(title: "아이언맨", price: 15000))
selBook(book: .magazine(title: "월간낚시", price: 20000))
Books2 타입을 담는 bookList를 선언하고 selBook 함수는 bookList에 책을 추가하게 만들었다.
bookList에 담은 값들을 for문을 사용하여 확인하였다.
for item in bookList {
switch item{
case let .fiction(title, price):
print("제목 : ", title, "가격 : ", price, "분류 - 소설")
case let .comics(title, price):
print("제목 : ", title, "가격 : ", price, "분류 - 만화")
case let .magazine(title, price):
print("제목 : ", title, "가격 : ", price, "분류 - 잡지")
}
}
작성해놓은 enum에 기능을 더 추가할 수 있다.
extension Books2 {
var typeLocation: String {
switch self {
case .comics:
return "분류 - 만화 A1"
case .fiction:
return "분류 - 소설 B1"
case .magazine:
return "분류 - 잡지 C1"
}
}
}
extenstion 키워드를 사용해 Books2 타입에 typeLocation이라는 책의 분류와 위치를 알려주는 기능을 추가했다.
for item in bookList {
switch item{
case let .fiction(title, price):
print("제목 : ", title, "가격 : ", price, item.typeLocation)
case let .comics(title, price):
print("제목 : ", title, "가격 : ", price, item.typeLocation)
case let .magazine(title, price):
print("제목 : ", title, "가격 : ", price, item.typeLocation)
}
}
추가한 typeLocation을 사용하여 for문을 변경했다.
'DEV - iOS > iOS' 카테고리의 다른 글
[Swift] 스위프트 기본 문법 공부(8) - Properties (0) | 2022.02.18 |
---|---|
[Swift] 스위프트 기본 문법 공부(7) - Class(참조 & 상속) (0) | 2022.02.17 |
[Swift] 스위프트 기본 문법 공부(5) - 함수 & 클로저 (0) | 2022.02.14 |
[Swift] 스위프트 기본 문법 공부(4) - Set & Dictionary (0) | 2022.02.09 |
[Swift] 스위프트 기본 문법 공부(3) - Array (0) | 2022.01.09 |