func c<T> (_ arr: [T]) -> [T] {
return arr.enumerated()
.filter { $0.offset % 2 != 0 }
.map { $0.element }
}
문제 요구사항에 따라 제네릭 함수로 구현하였는데 호출 시 경고 문구가 떴다.

잘 선언해준 것 같은데 왜그러시는지...?
빌드에는 문제가 없었다.
구글링해보니 제네릭을 사용할 경우 컴파일러가 제네릭 타입을 추론할 수 있는 단서를 주어야 한단다.
(→ 아니 근데 함수 선언할 때도 그렇고, 파라미터로도 값이 들어가는데 왜 추론을 못한다는거임???)
참고: Cannot explicitly specialize a generic function

그래서 변수에다가 타입도 명시해봤는데 여전히 뜬다. (왜???)
튜터님께 여쭤봤더니 이미 파라미터로 타입을 알 수 있는데 타입을 명시해야할 필요가 없지않냐고 하셨다.
맞넹...

타입 명시 없으면 경고 없이 잘 나온다.
결국 그냥 필요없는 부분이니 지우라는 뜻이었나보다.
(알고보니 위에 참고했던 stackOverflow에서도 경고 안뜨는 문구에는 함수 호출 시 타입을 명시하지 않았다.)
좀 쓰잘데기없긴 했지만 궁금증 해결!
연관값 사용하기
enum Beverage {
case coffee(coffeeName: String, size: Int)
case tea(teaName: String, isIced: Bool)
case juice(juiceName: String)
}
var myDrink = Beverage.coffee(coffeeName: "아이스 아메리카노", size: 100)
switch myDrink {
case .coffee(let name, let size):
print("커피: \(name), 사이즈: \(size)")
case let .tea(name, isIced):
print("차: \(name), \(isIced ? String("아이스"): String("핫"))")
case .juice(let name):
print("주스: \(name)")
}
// "커피: 아이스 아메리카노, 사이즈: 100" 출력
→ myDrink.coffeeName 과 같은 형태로는 연관값 사용 불가
➡︎ myDrink가 .coffee가 아닌 다른 케이스일 가능성이 있으므로 myDrink.coffeeName처럼 직접 접근하는 방법은 안전하지 않음
case .coffee(let name, let size):case let .tea(name, isIced):case let .coffee(name, _):_로 생략하여 특정 연관값만 사용 가능