extension
과 where
키워드를 이용해서 프로토콜을 조건에 따라 적용할 수 있다.
Protocol Naming{
var name: String {get, set}
}
extension Naming where Self: Cat{
func sayHi(){
print("\(name) 야옹")
}
}
Class Cat: Naming{
var name: String
init(name: String){
self.name = name
}
}
Class Dog: Naming{
var name: String
init(name: String){
self.name = name
}
}
let cat = Cat(name: "고양이")
cat.sayHi() //고양이 야옹
let dog = Dog(name: "강아지")
//dog.sayHi()없음
extension Naming{
func sayHi() where Self = Cat{
...
}
func sayHi() where Self = Dog{
...
}
}