프로토콜의 상속
- A프로토콜, B프로토콜이 있고 B프로토콜이 A프로토콜을 상속할시
- B프로토콜을 채택하면 A + B프로토콜의 요구사항을 모두 구현해야 한다
- 프로토콜끼리는 다중상속이 가능하다 (단순히 요구사항의 나열)
protocol SomeProtocol {
func doSomething()
}
protocol SomeProtocol2 {
func doSomething2()
}
protocol SomeProtocol3: SomeProtocol, SomeProtocol2 {
func doSomething3()
}
// SomeProtocol3 채택시 상속된 프로토콜의 모든 요구사항을 구현해야함
class AClass: SomeProtocol3 {
func doSomething() { // SomeProtocol의 요구사항
print("doSomething")
}
func doSomething2() { // SomeProtocol2의 요구사항
print("doSomething2")
}
func doSomething3() { // SomeProtocol3의 요구사항
print("doSomething3")
}
}
클래스 전용 프로토콜
- 프로토콜에 AnyObject 프로토콜 상속시 클래스에서만 채택가능한 클래스 전용 프로토콜이 된다
protocol SomeProtocol: AnyObject {
}
class AClass: SomeProtocol {
}
/* 구조체나 열거형에서는 AnyObject를 상속한 프로토콜 채택 불가능
struct AStruct: SomeProtocol {
}
*/
프로토콜의 합성
- 프로토콜을 &으로 연결해서 프로토콜 여러개랄 병합해서 타입으로 사용가능
protocol SomeProtocol {
}
protocol SomeProtocol2 {
}
class AClass: SomeProtocol, SomeProtocol2 { }
class BClass: SomeProtocol2 { }
let aClass = AClass()
let bClass = BClass()
//프로토콜을 &으로 연결해서 프로토콜 여러개랄 병합해서 타입으로 사용가능
let some: SomeProtocol & SomeProtocol2 = aClass
// let some: SomeProtocol & SomeProtocol2 = BClass (SomeProtocol2밖에 채택이 안됐으므로 불가능)
'Swift > 문법' 카테고리의 다른 글
[Swift] 함수의 타입이랑 일급객체 (0) | 2022.05.17 |
---|---|
[Swift] 프로토콜 (4/4) 프로토콜의 확장 (0) | 2022.04.16 |
[Swift] 프로토콜 (2/4) 타입으로써의 프로토콜 (0) | 2022.04.16 |
[Swift] 프로토콜 (1/4) 프로토콜의 기본 문법 (0) | 2022.04.10 |
[Swift] 확장 (extension) (0) | 2022.04.10 |