프로토콜은 타입이다
- 프로토콜을 변수에 할당할수 있다
- 프로토콜을 함수의 파라미터로 전달할 수 있다
- 함수에서 프로토콜을 반환할 수 있다
protocol SomeProtocol { }
class AClass: SomeProtocol {
}
// 프로토콜타입의 변수에는 해당 프로토콜을 채택한 인스턴스 할당 가능
let aClass: SomeProtocol = AClass()
// 프로토콜 채택여부 확인
aClass is SomeProtocol // true
// 프로토콜 타입으로 저장된 인스턴스를 원래의 타입으로 확인
aClass is AClass // true
// 프로토콜이 채택된 클래스나 구조체로 다운캐스팅 가능
let aClass2: AClass = aClass as! AClass
aClass2 is SomeProtocol // true
aClass2 is AClass // true
// 클래스나 구조체에서 채택된 프로토콜로 업캐스팅 가능
let aClass3: SomeProtocol = aClass2 as SomeProtocol
// 프로토콜은 타입이기 때문에 함수의 파라미터로 전달할수 있으며
// 당연히 반환도 가능하다
func doSomething(c: SomeProtocol) -> SomeProtocol {
return c
}
// 함수 파라미터 타입의 프로토콜을 채택한 인스턴스를 전달(꼭 프로토콜 타입일 필요는 없음)
doSomething(c: aClass)
doSomething(c: aClass2)
'Swift > 문법' 카테고리의 다른 글
[Swift] 프로토콜 (4/4) 프로토콜의 확장 (0) | 2022.04.16 |
---|---|
[Swift] 프로토콜 (3/4) 프로토콜의 상속 (0) | 2022.04.16 |
[Swift] 프로토콜 (1/4) 프로토콜의 기본 문법 (0) | 2022.04.10 |
[Swift] 확장 (extension) (0) | 2022.04.10 |
[Swift] 타입캐스팅 (is, as?, as! 연산자) (0) | 2022.04.09 |