enum
작성일
enum
- 타입분류 예를 들어 도서관 -> 항목 -> 소설, 문제집, 패션, 만화책
//분류만 하고 싶다.
enum BookType {
case fiction
case comics
case workbook
}
var bookStyle: BookType? //기본타입이 무슨 타입인지 모르기 떄문에 ? 를 쓴다.
var books = [BookType]()
func saveBook(book: BookType) {
books.append(book)
}
saveBook(book: .comics)
saveBook(book: .fiction)
saveBook(book: .workbook)
saveBook(book: .workbook)
books
해서 보면, books엔
[comics, fiction, workbook, workbook]
이 이렇게 들어가 있다.
만약에 book타입을 보고 가지고 오고싶으면,
func loadBook(book: BookType) -> [BookType]{
var tempBooks = [BookType]()
for item in books {
if item == book {
tempBooks.append(item)
}
}
return tempBooks
}
코드를 추가하고
loadBook(book: .workbook)
을 출력하면
[workbook, workbook]
이 출력이 된다.
만약에 책안에 이름과, 값, 년도가 추가되고 그걸 따로 뺴 내고 싶을땐,
enum BookType {
case fiction(title: Stirng, price: Int, year: Int)
case comics(title: Stirng, price: Int, year: Int)
case workbook(title: Stirng, price: Int, year: Int)
}
var bookStyle: BookType?
var books = [BookType]()
func saveBook(book: BookType) {
books.append(book)
}
saveBook(book: .comics(title: "aaa", price: 5000, year:2020) )
saveBook(book: .comics(title: "bbb", price: 6000, year:2021) )
saveBook(book: .comics(title: "ccc", price: 7000, year:2010) )
saveBook(book: .workbook(title: "ddd", price: 7000, year:2010) )
saveBook(book: .fiction(title: "eee", price: 4000, year:2020) ))
saveBook(book: .fiction(title: "fff", price: 8000, year:2015) ))
for book in books {
switch book {
case let .comics(_, price, _):
print(price)
case let .fiction(title, _, _):
print(title)
default:
break
}
}
이렇게하면 .comics를 했을때 가격만 나오고, .fiction를 하면 제목만 나온다.
만약에 딱 하나의 값만 찾고싶을땐 swithch문을 돌리지말고,
if case let BookType.comics(title, _, _) = book {
print("comics", title)
}
이렇게 사용하면 된다.
enum의 기능을 확장할 수도 있다.
enum BookType {
case fiction(title: Stirng, price: Int, year: Int)
case comics(title: Stirng, price: Int, year: Int)
case workbook(title: Stirng, price: Int, year: Int)
}
var bookStyle: BookType?
var books = [BookType]()
func saveBook(book: BookType) {
books.append(book)
}
saveBook(book: .comics(title: "aaa", price: 5000, year:2020) )
saveBook(book: .comics(title: "bbb", price: 6000, year:2021) )
saveBook(book: .comics(title: "ccc", price: 7000, year:2010) )
//추가된 내용
extension BookType {
var typeName: String {
switch self {
case .comics:
return "comics"
case .fiction:
return "fiction"
case .workbook:
return "workbook"
}
}
}
for book in books {
if case let BookType.comics(title, _, _) = book {
print(title, typeName)
}
}
이렇게 사용하면
aaa comics
bbb comics
ccc comics
로 출력이 된다.