스위프트에서 프로토콜 조건은 제네릭 타입의 제약 조건을 정의하는 데 사용되는 개념입니다.
제네릭 함수나 타입을 선언할 때, 특정 프로토콜을 준수하는 타입만을 제네릭으로 받도록 제한하고 싶을 때 사용됩니다.
func someFunction<T: SomeProtocol>(parameter: T) {
// 함수 내용
}
struct SomeStruct<T: AnotherProtocol> {
// 구조체 내용
}
<T: SomeProtocol>와 <T: AnotherProtocol>는 제네릭 타입 T가 각각 SomeProtocol와 AnotherProtocol 프로토콜을 준수하는 타입으로 제한되도록 정의한 것입니다.
func findIndex<T: Equatable>(of valueToFind: T, in array: [T]) -> Int? {
for (index, value) in array.enumerated() {
if value == valueToFind {
return index
}
}
return nil
}
let names = ["Alice", "Bob", "Charlie"]
let index = findIndex(of: "Bob", in: names)
print("Index of Bob: \(index ?? -1)") // Index of Bob: 1
findIndex 함수에서 T: Equatable은 valueToFind와 배열의 요소들이 Equatable 프로토콜을 준수하는 타입으로 제한됩니다.
이를 통해 == 연산자를 사용하여 값을 비교할 수 있습니다.
참고(출처) : 개발하는 정대리, 야곰(Swift5)