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

로 출력이 된다.