[내일배움캠프] 260106 TIL

Bambu·2026년 1월 6일

내배캠 TIL

목록 보기
13/52

1. 프로그래밍 기초 주차 과제

Github - yerin branch

1) 제네릭 함수 타입 추론

    func c<T> (_ arr: [T]) -> [T] {
        return arr.enumerated()
            .filter { $0.offset % 2 != 0 }
            .map { $0.element }
    }

문제 요구사항에 따라 제네릭 함수로 구현하였는데 호출 시 경고 문구가 떴다.

잘 선언해준 것 같은데 왜그러시는지...?
빌드에는 문제가 없었다.

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

그래서 변수에다가 타입도 명시해봤는데 여전히 뜬다. (왜???)

튜터님께 여쭤봤더니 이미 파라미터로 타입을 알 수 있는데 타입을 명시해야할 필요가 없지않냐고 하셨다.

맞넹...

타입 명시 없으면 경고 없이 잘 나온다.
결국 그냥 필요없는 부분이니 지우라는 뜻이었나보다.
(알고보니 위에 참고했던 stackOverflow에서도 경고 안뜨는 문구에는 함수 호출 시 타입을 명시하지 않았다.)

좀 쓰잘데기없긴 했지만 궁금증 해결!

2. 문법 종합반 강의 수강

1) 열거형

연관값 사용하기

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, _):
    ⇒ 필요 없는 값은 _로 생략하여 특정 연관값만 사용 가능
profile
안녕하세요, iOS 개발을 공부하고 있는 Bambu입니다. (프로필: Swifticons)

0개의 댓글