case let은 바인딩할때 씀
그러므로 where을 붙일수 있음
enum 떡볶이 {
case 일반
case 치즈
}
let 내떡볶이 = 떡볶이.치즈
switch 내떡볶이 {
case .치즈:
치즈토핑얹기()
case .일반:
break;
}
떡복이의 case는 두개이므로 처리해야할 case는 두개다
떡볶이의 case가 만약 3개인데 한개의 case만 처리하고 싶다면
switch 내떡볶이 {
case .치즈:
치즈토핑얹기()
default:
break
}
이런식으로 한개의 케이스를 처리후 나머지는 default로 처리해준다
다만 switch로 처리할시 쓸데없이 default를 적어주어야 하는 번거로움이 생길수 있다 그것을 해결할수 있는것이
if case let, if case
if case let .치즈 = 내떡볶이 {
치즈토핑얹기()
}
문법이 조금 특이합니다.
'내떡볶이' 가 할당 연산자(=) 오른쪽에 위치하고 있고,
처리할 case 가 왼쪽에 위치합니다.
위 코드에서 '내떡볶이' 라는 떡볶이 열거형 인스턴스가 [case 치즈] 라면, if 블럭은 실행됩니다.
그런데 위와 같은 경우 let 도 사실 적어줄 필요가 없답니다 :)
따라서 아래와 같이 적어주어도 올바른 문법입니다.
if case .치즈 = 내떡볶이 {
치즈토핑얹기()
}
그럼 let 은 언제 사용하는 것일까요?
let 은 연관값을 바인딩 할때 사용합니다.
연관값 바인딩에 익숙하시다면 아래 두 종류의 코드가 금방 이해되실 것입니다.
이를 위해 떡볶이 열거형에 [case 믹스] 를 추가해볼게요!
let 나만의떡볶이조합 = 떡볶이.믹스(떡비율: 0.64, 오뎅비율: 0.36)
if case let .믹스(떡양, 오뎅양) = 나만의떡볶이조합 {
떡넣기(떡양)
오뎅넣기(오뎅양)
}
이것은 연관값 바인딩 방식과 같습니다.
만약 떡양에는 관심이 없다면 _ (언더스코어)를 사용하여 와일드카드 패턴으로 처리합니다.
if case .믹스(_, let 오뎅비율) = 나만의떡볶이조합 {
떡넣기(1 - 오뎅비율)
오뎅넣기(오뎅비율)
}
추가적으로 if 뿐만 아니라 guard 문에도 사용할 수도 있으며, 조건문 뒤에 연결되는 표현식에서도 사용할 수 있습니다.
// guard-case-let
guard case .치즈 = 내떡볶이 else {
print("아 왜 치즈로 안사오냐고!")
return
}
// chained expressions
guard let 주문한떡볶이 = 배민주문(), case .치즈 = 주문한떡볶이 else {
print("아 잘못시켰네;;;")
return
}