HIT해

[Swift 기초문법 - 49] 프로토콜 조건 적용 본문

Swift/Swift 기초문법

[Swift 기초문법 - 49] 프로토콜 조건 적용

힛해 2024. 8. 19. 21:38
728x90

프로토콜을 적용하는데 특정 class에만 적용을 하고싶다면

extension 프로토콜명 where Self : 클래스명 {}

 

으로 구현할 수 있다!

 

프로토콜 조건부 적용 예시

import Foundation

protocol Naming{
    
    var name : String {get set}
    
}

class Cat : Naming {
    var name: String
    init(name: String) {
        self.name = name
    }
}

class Dog : Naming{
    var name: String
    init(name: String) {
        self.name = name
    }
}

// 자기 자신이 만약 고양이다
extension Naming where Self : Cat {
    func sayName(){
        print("\(self.name) 야옹")
    }
}

let myCat = Cat(name: "도라에몽")
myCat.sayName()

let myDog = Dog(name: "흰둥이")
myDog.

 

myCat 인스턴스 sayName 함수가 구현되어있지만 myDog에는 구현이 되지 않는다!

 

추가로 extension 자체에 Self 키워드를 사용해서 적용하지 않고 extension안에 정의되어있는 함수별로 조건을 걸 수도 있다!

 

extension func 조건부 정의

extension Naming {

func sayName() where Self : Dog {
	print("멍멍")
}

func sayName() where Self : Cat {
	print("야옹)
}

}

 

이렇게 정의를 하면 하나의 extension 만으로 여러 조건을 설정 할 수 있다