👾 라이브러리
- 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 파라미터를 통해 선택된 항목에 저장되어 있는 데이터를 가져오도록함
'프로젝트 만들어보기' 카테고리의 다른 글
[iOS] 실시간 공지 팝업 만들기 (Swift) (0) | 2022.11.14 |
---|---|
[iOS] 신용카드 추천 리스트 만들기 (Kingfisher / lottie / Realtime Database / Cloud Firestore) (0) | 2022.11.12 |
[iOS] 날씨 앱 만들기 (UIKit) (0) | 2022.10.25 |
[iOS] TodoList 만들기 3/3 (.setEditing/commit editingStyle forRowAt/moveRowAt) (1) | 2022.10.11 |
[iOS] TodoList 만들기 2/3 (UserDefaults/didSelectRowAt) (2) | 2022.10.11 |