enum LunchChoice {
case pasta
case burger
case soup
case taco
// 한줄로 압축 가능
enum LunchChoice {
case pasta, burger, soup, taco
enum LunchChoice {
case pasta, burger, soup
}
var choice: LunchChoice
choice = LunchChoice.burger
// LunchChoice 생략 가능
choice = .burger
class
, struct
, enum
모두 type을 정의하는 것.enum
내부에도 property와 method 존재 가능enum Suit {
case spades, hearts, diamonds, clubs
// computed property
var rank: Int {
switch self {
case .spades: return 4
case .hearts: return 3
case .diamonds: return 2
case .clubs: return 1
}
}
// method
func beats(_ otherSuit: Suit) -> Bool {
return self.rank > otherSuit.rank
}
}
enum LunchChoice {
case pasta
case burger
case soup
}
let choice = LunchChoice.burger
switch choice {
case .pasta:
"🍝"
case .burger:
"🍔"
default:
"🍲"
}
enum LunchChoice {
case pasta
case burger
case soup
case taco
}
let choice = LunchChoice.burger
if choice == .pasta {
return "🍝"
} else if choice == .burger {
return "🍔"
} else if choice == .soup {
return "🍲"
}
Switch must be exhaustive.
에러 발생switch choice { // Switch must be exhaustive. 에러 발생 !
case .pasta:
"🍝"
case .burger:
"🍔"
case .soup:
"🍲"
}
따라서, App의 안정성을 위해 enum을 사용할 경우 Switch로 분기처리를 하는 것이 좋다.
하지만 아래처럼 Switch에 default를 포함시켜 코드를 작성하면,
enum에 새로운 값을 추가하여도 Switch문에 에러가 나지 않으므로
App의 안정성이 떨어진다.
그러므로 이 경우에는 default문 쓰지 않는게 좋다.
enum LunchChoice {
case pasta
case burger
case soup
case taco
}
let choice = LunchChoice.burger
switch choice {
case .pasta:
"🍝"
case .burger:
"🍔"
// soup, taco일때 모두 아래 코드 실행
default:
"🍲"
}