개발/Swift
[Swift] Protocol & Delegate
덤벨로퍼
2020. 11. 4. 16:30
Bird라는 슈퍼클래스에 fly() 기능을 넣어두고
Eagle이라는 자식 클래스에 Bird 클래스를 Inherit 한다고가정했을때
Penguin은 Bird 클래스를 상속 받지만 fly() 기능을 사용하면 안된다.
AirPlane 을 구현할경우 fly를 사용하기 위해 Bird를 상속받아야하는 경우도 생긴다.
이때 프로토콜을 사용하다.
protocol CanFly{
func fly()
}
인터페이스 처럼 상세구현은 자식에서한다.
class Eagle : Bird , CanFly{
func fly(){
print("FLY")
}
}
protocol은 class 가 아닌 struct에서도 상속 받을수있다.
Delegate
Model - WeatherManager 클래스에서
우선 프로토콜을 만든다
protocol WeatherManagerDelegate {
func didUpdateWeather(weather:WeatherModel)
}
didUpdateWeather()는 하위 클래스에서 구현할것이다.
우선 didUpdateWeather 메소드는
Model - WeatherManager 클래스에서 사용할것이다.
(해당 메소드를 실행 시킬 클래스)
날씨에 대한 데이터를 받자마자 해당 메소드를 실행시킬것이다.
우선 해당프로토콜 delegate를 만든다.
var delegate : WeatherManagerDelegate?
그리고 해당 클래스에서 필요한 didUpdateWeather를 데이터를 받고나서 사용한다.
if let weather = self.parseJSON(weatherData: safeData){
delegate?.didUpdateWeather(weather: weather)
}
하지만 아직 메소드가 상세히 구현되어있지 않다.
viewController에가서 해당 프로토콜을 상속받은뒤 delegate 지정후
메소드를 구현한다.
//viewDidLoad 에서 delegate 지정후
weatherManager.delegate = self
메소드 구현
func didUpdateWeather( weather : WeatherModel){
print(weather.temperature)
}