어제 체력이슈로 복습을 원하는 만큼 못해서 오늘은 복습부터 시작해보았다.
사실 컬렉션 부분 + 열거형은 필수적인데 그렇게 재밌게 느껴지지는 않는 것 같다(그래도 열거형이 커스텀 타입이라 더 재밌긴 한것 같다)
(컬렉션 부분에서는 암기에 가까운 연산자들을 많이 배워서 그런가..혹은 너무 로지컬한 내용은 없기때문에 그럴지두, 아니면 체력이슈 ㅎㅎ )
그래도 optional타입이 사실 열거형이라는것을 바인딩 예시와 함께 정확하게 알게되는 등을 한번 더 복습할 수 있어서 좋았다.
특히 열거형의 경우 원시값이나 연관값, 바인딩 사용예시 등이 아직 익숙하지 않아서 필수적으로 정리하는 과정이 필요했다.
사실 아직 열거형의 연관값 바인딩 부분은 어색하게 느껴지는 부분이 있는데 아무래도 case 별로 나눌때 앞에 열거형 타입명을 생략하는 경우와 심지어 let 을 생략하는 경우도 있기 때문이 아닐까 싶다.
예를들어
switch customComputer {
case .cpu(let x, let y)
}
에서
case .cpu(let x, let y) 와 같은 바인딩 부분을
case let .cpu(x,y) **
이렇게 축약해서도 사용할수있다.
옵셔널 바인딩의 경우 unwrapping을 하는 if let 바인딩이 사실은 이렇게 풀어쓴다는걸 옵셔널타입이 열거형이고, 우리가 사용하는 nil이 아닌 옵셔널타입이 .some 케이스에 들어있다는 것을 알게되면 다음과 같이 풀어쓸수도 있다.
switch number {
case .some(let num):
///내가 하고싶은 내용 이 들어간다
case .none:
/// nil일때 일어나는 일
}
위와 같은 switch문을 옵셔널 바인딩을 할때는
if case let number? = num{
//내가 하고싶은 내용이 들어간다
}
이런식으로.. 쓴다고 생각해줄수도 있다.
사족
일부 다른분들이 올려주신 FAQ 예시를 잘못보고 헷갈리게 접근해서 개념이 약간 혼란스러울 뻔했는데, 지금 작성하면서 조금 더 정리가 되었다. TIL의 힘..!
주의점
원시값과 연관값은 서로 배타적임으로 동시사용이 불가하다.
둘의 값의 저장시점, 사용이유,값의 변경여부, 자주쓰이는 타입도 다 다르다.