switch, case let, if case let

고양이발냄새·2023년 8월 6일
0

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 
}
profile
고양이좋아

0개의 댓글

관련 채용 정보