앱개발 숙련 마지막 강의로 OpenWeather API 를 사용한 날씨 앱을 만들어 보았다.
API 를 통해 현재 날씨의 데이터를 받아오고
// 서버에서 현재 날씨 데이터를 불러오는 메서드
private func fetchCurrentWeatherData() {
var urlComponents = URLComponents(string: "https://api.openweathermap.org/data/2.5/weather")
urlComponents?.queryItems = self.urlQueryItems
guard let url = urlComponents?.url else {
print("잘못된 URL")
return
}
fetchData(url: url) { [weak self] (result: CurrentWeatherResult?) in
guard let self, let result else { return }
// UI 작업은 메인 쓰레드에서 작업
DispatchQueue.main.async {
self.tempLabel.text = "\(Int(result.main.temp))°C"
self.tempMinLabel.text = "최소: \(Int(result.main.temp_min))°C"
self.tempMaxLabel.text = "최고: \(Int(result.main.temp_max))°C"
}
guard let imageUrl = URL(string: "https://openweathermap.org/img/wn/\(result.weather[0].icon)@2x.png") else { return }
// image 를 로드하는 작업은 백그라운드 쓰레드 작업
if let data = try? Data(contentsOf: imageUrl) {
if let image = UIImage(data: data) {
// 이미지뷰에 이미지를 그리는 작업은 UI 작업이기 때문에 다시 메인 쓰레드에서 작업.
DispatchQueue.main.async {
self.imageView.image = image
}
}
}
}
예측날씨또한 API로 데이터를 받아
테이블 뷰 데이터소스에서 예측 날씨에 대한 정보를 넣어주었다.
extension ViewController: UITableViewDataSource {
// 테이블 뷰의 indexPath 마다 테이블 셀 지정.
// indexPath = 테이블 뷰의 행과 섹션을 지정. 여기서 섹션은 사용하지 않고 행만 사용함.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.id) as? TableViewCell else { return UITableViewCell() }
cell.configureCell(forecastWeather: dataSource[indexPath.row])
return cell
}
// 테이블 뷰 섹션에 행이 몇 개 들어가는가. 여기서 섹션은 없으니 그냥 총 행 개수를 입력하면 된다.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
dataSource.count
}
}
새로운 과제는 연락처 앱이다.
포켓몬 API 를 통한 랜덤 이미지 생성과 CoreData를 활용해 연락처 데이터를 저장하는 방식이다.
API 연결에 대한 실습과 CoreData를 활용해볼 수 있는 앱인 것 같다.
과제를 시작하기 전 어떤 식으로 앱을 구성할 지 생각을 해보았다.
대략적으로 MVC 패턴을 사용해보고자 하는 목표를 가지고 ETA의 경우 노션을 활용해 연습해보기로 했다.
타임라인을 활용해 예상 소요기간과 실제 소요시간을 레벨별로 구체적으로 기록해두어 비교해보기로 하였다.
네트워크 통신과 데이터 저장이라는 틀을 가지고 디렉토리를 분류해보기로 하고
UI에 대한 구성을 생각해보았다.
'내일배움캠프 iOS' 카테고리의 다른 글
UIKit) TIL # 38 포켓몬 연락처 앱 과제 마무리, 트러블 슈팅 (0) | 2024.12.11 |
---|---|
UIKit) TIL # 36 포켓몬 연락처 앱 과제 (Lv 1 ~ 4) (1) | 2024.12.09 |
UIKit) TIL # 34 CRUD (CoreData , Networking) (2) | 2024.12.05 |
UIKit) TIL # 33 메모리 관리 이해 (1) | 2024.12.04 |
UIKit) TIL #32 MVC, Delegate Pattern (1) | 2024.12.03 |