Typealiases and a Protocols and Delegate

Woozoo·2022년 12월 18일
0
post-custom-banner

weatherData 디코딩과 인코딩이 가능한 Codable로 바꿔준다.

파싱한 제이슨 데이터를 받아야하니까 parseJSON 메소드를 WeatherModel이 나오게끔 바꾸고,

에러가 발생할 수도 있으니까 캐치블록에서 nil을 반환해야한다. -> parseJSON 메소드는 WeatherModel? 옵셔널이 되어야하겠네

이제 weather를 써야하는데 어떻게 weatherVC에서 사용할 수 있을까?

if let weather = self.parseJSON(weatherData: safeData) {
	let weatherVC = WeatherViewController()
    weatherVC.didUpdateWeather(weather)
}

이렇게 갈수도 있겠지만 더 쉽게 가는 방법이 있다. -> Delegate 디자인 패턴

if let weather = self.parseJSON(weatherData: safeData) {
	delegate?.didUpdateWeather(weather: weather)
}

요런식으로

WeatherManagerDelegate 선언하고
delegate 변수 만든 다음에
delegate 들고 있는 친구들은 다 didUpdateWeather 하세요~ 해준다

WeatherViewController도 수정했는데

func didUpdateWeather 함수 구현해주니까 오류 발생!
UI업뎃 되는 거라서 (메인 스레드?! 에서 작동해야한다는 고런 의미인 것 같음)
코드 수정 해줘야함

아 그리고 delegate 선언되는 부분이 옵셔널이 해제되는 부분이라서
WeatherManagerDelegate의 함수 프로퍼티 WeatherModel은 옵셔널이 아님!!

수정하면 요렇게

profile
우주형
post-custom-banner

0개의 댓글