프로토콜의 확장
- 프로토콜은 스스로를 준수하는 타입에 제공하기 위한 메서드, 초기화 구문, 서브스크립트 및 계산된 프로퍼티 구현을 확장할 수 있다.
extension RandomNumberGenerator {
func randomBool() -> Bool {
return random() > 0.5
}
}
확장간 기본 구현내용 제공
- 해당 프로토콜의 모든 메서드 또는 계산된 프로퍼티의 요구사항에 기본 구현을 제공하기 위해서, 프로토콜 확장을 사용할 수 있다. 다음 예시에서는 프로토콜 프로퍼티의 기본 구현을 미리 제공할 수 있다.
extension PrettyTextRepresentable {
var prettyTextualDescription : String {
return textualDescription
}
}
프로토콜 확장에 제약사항 추가
- 프로토콜의 확장을 정의하는 경우 where절을 통해서 제약사항 추가가 가능하다.
extension Collection where Element : Equatable {
func allEqual() -> Bool {
for element in self {
if element != self.first {
return false
}
}
return true
}
}
let equalNumbers = [100, 100, 100, 100]
let differentNumbers = [200, 100, 200, 100]
print(equalNumbers.allEqual())
print(differentNumbers.allEqual())