Trouble Shooting

값(value)을 외부로 꺼내는 게 막힐 때

GEEEEEEEE

문제 발생 :

 

 

API 데이터 통신 함수에서 연산한 값을 외부로 꺼내서 사용해야 하는데,

 

 

 

값을 반환할 수가 없어서, 외부로 꺼내서 사용할 수가 없었다.

 

 

 

문제 원인 추정 :

 

 

 

API 데이터 통신 하는 함수 내에서 값을 반환시켜도 이는 함수에서 설정한 반환 조건을 충족시키지 못한다.

 

 

 

즉, 함수(getCurrentData) 내부의 클로저에서 반환한 것이 아닌, API 데이터 통신 함수 내에서 반환한 것이기 때문이다.

 

 

문제 해결법 :

 

 

탈출 클로저(Escaping Closure)를 사용한다.

 

 

 

탈출 클로저를 사용하면 함수가 반환된 후에 클로저가 실행되므로

 

 

 

탈출 클로저의 타입으로 지정된 값을 외부에서 저장하거나 다른 스레드에서 사용할 수 있습니다.

 

 

 

그래서, 위에서 반환해주려고 하는 CurrentData 타입의 값을 다른 외부의 함수에서 실행시킨 후에 받아와서 사용할 수 있습니다.

 

 

 

먼저, 탈출 클로저를 함수의 인자안에 작성해줍니다.

 

 

 

그리고 탈출 클로저의 인자이름인 Completion에 담아주고자 하는 값(CurrentData 타입)을 지정해줍니다.

 

 

 

 

 

ViewModel에 있는 getCurrentWeatherData 함수를 실행시킨 후, 탈출 클로저의 데이터의 값을

 

 

 

이름을 지정해준 후 사용할 수 있는 형태로 바꿨습니다. (Xcode에서 값의 이름을 지정해준 후 사용할 수 있게끔 지원!)

 

 

 

 

 

탈출 클로저를 통해 가져온 값을 UI에 보여줄 수 있게끔 설정하였습니다.

 

 

 

그리고 추가로 UIImage 타입의 데이터도 탈출 클로저를 이용하여 외부에서 사용할 수 있게끔 설정한 후 값을 가져와

 

 

 

ImageView의 image로 설정하였습니다.