Swift 둘러보기 (A Swift Tour) - 제네릭 (Generics)

00yhsp·2024년 3월 26일

제네릭(generic) 함수 또는 타입을 만들기 위해 꺾쇠 괄호 안에 이름을 작성한다.

func makeArray<Item>(repeating item: Item, numberOfTimes: Int) -> [Item] {
	var result = [Item]()
    for _ in 0..<numberOfTimes {
    	result.append(item)
    }
    return result
}
makeArray(repeating: "knock", numberOfTimes: 4)

제네릭 형태의 함수와 메서드 뿐만 아니라 클래스, 열거형, 그리고 구조체도 만들 수 있다.

enum OptionalValue<Wrapped> {
	case none
    case some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .none
possibleInteger = .some(100)

요구사항의 리스트를 지정하기 위해 본문 바로 전에 where을 사용한다.
예를 들어, 타입이 프로토콜을 구현하도록 요구하거나 두 타입이 동일하도록 요구하거나 클래스에 특정 상위 클래스가 있어야 한다.

func anyCommonElements<T: Sequence, U: Sequence>(_ lhs: T, _ rhs: U) -> Bool where T.Element: Equatable, T.Element == U.Element {
	for lhsItem in lhs {
    	for rhsItem in rhs {
        	if lhsItem == rhsItem {
            	return true
            }
        }
    }
    return false
}
anyCommonElements([1, 2, 3], [3])

<T: Equatable>을 작성하는 것은 <T> ... where T: Equatable을 작성하는 것과 같다.

profile
iOS Dev

0개의 댓글