프로젝트 만들어보기

[iOS] 코로나 어플만들기 - COVID19 (Swift)

데브킹덕 2022. 10. 30. 18:50

 

 

 

👾 라이브러리

  • Alamofire
  • corona-19API (굿바이코로나)
  • Charts (도넛 모양 차트 )

https://github.com/Alamofire/Alamofire

 

GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift

Elegant HTTP Networking in Swift. Contribute to Alamofire/Alamofire development by creating an account on GitHub.

github.com

https://github.com/dhlife09/Corona-19-API?utm_source=keygen-email 

 

GitHub - dhlife09/Corona-19-API: 코로나바이러스감염증-19 API 서비스 제공 - 코로나19 관련 API를 무제한

코로나바이러스감염증-19 API 서비스 제공 - 코로나19 관련 API를 무제한 무료로 사용하세요! / 🇰🇷 South Korea's COVID-19 API service provided - Use COVID-19 related API for free for unlimited ! - GitHub - dhlife09/Corona-19

github.com

https://github.com/danielgindi/Charts

 

GitHub - danielgindi/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.

Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. - GitHub - danielgindi/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroi...

github.com

 

 

UIKit 사용 (StoryBoard 사용)

 

 

💡사용해보고 배운점

 

  • TableView - Static Cells 사용

Dynamic Prototype과 다르게 DataSource들이 IB를 통해 스토리보드에 바로 작성할 수 있었음

Dynamic Prototype은 DataSource를 메서드를 통해 가공할 수 있다.

말그대로 정적과 동적인 차이인것 같다. 

 

  • API Key를 통해 JSON형태의 시도별 코로나 현황 데이터를 받을 수 있었음

 

 

  • JSON 파일의 구조대로 구조체들을 만들었고 Codable을 이용해 JSON파일을 원하는 데이터로 가공시키려 함

 

 

 

 

  • API를 요청하고 서버에서 JSON 데이터를 응답 받거나 요청에 실패하였을때 completionHandler를 호출해 해당 클로져를 정의하는 곳에 응답받은 데이터를 전달하려고 함

 

url

- url을 요청하는 코드

 

param상수

- 딕셔너리 형태로 저장 (Key값에 Servicekey,Value - API키값)

- 딕셔너리 형태로 파라미터에 전달하면 url 뒤에 쿼리 파라미터를 추가함 

 

Alamofire라이브러리가 지원하는 AF.request를 통해 요청을 할 수 있었음

url - 요청할 url , method - 요청 형식 parameters - 요청시 같이 보낼 파라미터

 

  • responseData
    :DataResponseSerializer를 사용해 서버에서 반환된 데이터를 추출하고 유효성 검사를 진행한다. 응답한 데이터를  클로져 파라미터로 전달 
  • completionHandler - 어떠한 일이 끝났을때 진행할 업무를 담당함 

 

응답 받은 JSON 데이터 -> CityCovidOverview 객체에 매핑

요청 결과가 성공이면 연관 값으로 서버에서 응답 받은 data가 전달이 됨

응답 받은 data를 CityCovidOverView구조체 형태로 디코딩을 함

이때 do catch 문을 이용하여 예외 발생시 catch문을 반환하도록함

 

 

escaping closure

- 보통 네트워크 통신은 서버에서 데이터를 언제 응답시켜줄지 모르기 때문에 비동기적으로 작업됨

  fetchCovieOverview 함수내에서 비동기 작업을 하고 비동기작업을 completionHandler로 콜백시켜줘야 하기 때문에

   escaping 클로져를 사용해 함수가 반환된 후에도 실행되게 만들어줌

- 첫번째 제네릭으로 요청이 성공한다면 CityCovidOverview 열거한 값을 전달 받도록함

- 두번째 제네릭으로 요청에 실패하거나 에러가 생기면 객체가 연관값으로 전달 받도록함

 

 

totalCaseLabel - result.korea.totalCase

newCaseLabe -  result .korea.newCase

 

 

 

 

JSON응답이 배열이 아닌 하나의 객체기 때문에 CityCovidOverview 객체안에 있는 시도별 객체를 배열에 추가

 

 


 PieChart 구성하는 메서드

PieChart에 데이터를 표시하려면 PieChartDataEntry객체에 데이터를 추가해야함

entrise라는 CovidOverview 객체를 PieChartDataEntry 객체로 매핑

value  - 차트 항목 , label - 도시 이름 , data - 시도별 코로나 상세 데이터

dataSet으로 항목들을 묶어줌

 

 

JSON 의 String값을 -> Double 형으로 변환하는 메서드 

 

 

차트를 선택했을때 호출되는 메서드

entry 파라미터를 통해  선택된 항목에 저장되어 있는 데이터를 가져오도록함