Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR_forCodeReview_week4 #5

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

PR_forCodeReview_week4 #5

wants to merge 3 commits into from

Conversation

leewoojye
Copy link
Collaborator

⭐️ 4주차 과제 핵심 포인트 ⭐️

  • 기본&심화과제 모두 구현했습니다! 날씨상세뷰에서 시간대별 날씨는 3시간 단위로 날씨를 제공하는 API를 사용했습니다. (Hourly forecast API가 유료인 관계로...)
  • 서버에서 원하는 날씨정보를 API 호출을 통해 가져오기
  • 서버에서 받아온 JSON 객체를 구조체로 변환하고, 해당 구조체에서 사용할 정보만을 또 추출하기
  • JSON에서 받아온 데이터들을 구조체.swift 파일을 통해 원하는 데이터 포맷으로 변환하기
  • 홈화면 테이블뷰 셀 겹칩 현상 해결
  • 날씨상세뷰의 10일간 일기예보에는 API가 반영되지 않았습니다.

🔨 구현 방안 개요 🔨

  • JSON -> 구조체 변환은 quicktype.io를 통해 변환했습니다.
  • JSON 데이터를 받아오는 것과 별개로, ItemListData, ImageCollectionData 스위프트 파일에서 앱에 필요한 형태의 정보로 가공하는 과정을 거쳤습니다.

📍 핵심 코드 설명 📍

SecondViewController.swift

    private func fetchWeatherInfo() async {
        let city = self.Location
        imageCollectionList = [] // append를 쓰기 때문에 배열 초기화해줘야함
        
        for i in 0...11 {
            do {
                guard let currentWeather = try await GetTimeline.shared.GetTimelineData(cityname: city) else {return}
                let weatherInfo = ImageCollectionData(time: currentWeather.list[i].dtTxt, weather: currentWeather.list[i].weather[0].main.rawValue, temperature: currentWeather.list[i].main.temp)
                
                imageCollectionList.append(weatherInfo)
            } catch {
                print(error)
            }
        }
        
        do {
            guard let currentWeather = try await GetTimeline.shared.GetTimelineData(cityname: city) else {return}
            guard let time = extractHour(from: currentWeather.list[0].dtTxt) else {return}
            self.descriptionView.text = "\(String(describing: time))에 \(self.Weather) 상태가 예상됩니다."
        } catch {
            print(error)
        }
        collectionview.reloadData()
    }

do-catch 문을 두 번 이용하여 한 번은 시간대별 날씨 데이터를 배열에 넣어주고, 다른 한 번은 현재의 날씨를 라벨로 표현해주었습니다. 홈화면의 테이블뷰와 달리 시간대별 날씨에 사용된 콜렉션뷰에는 초반에 배열 초기화를 진행하여 다른 장소의 날씨데이터가 누적되는 현상을 방지했습니다.
또 시간대별 날씨 아이콘의 경우 3-hourly API에서 제공된 날씨 enum, 즉 Clear, Clouds, Snow, Rain 날씨를 네 종류로 간략화 한 뒤 기상 아이콘과 매칭해 주었습니다.

@leewoojye leewoojye self-assigned this Nov 17, 2023
@leewoojye leewoojye changed the title Create README.md PR_forCodeReview_week4 Nov 17, 2023
Copy link
Member

@mini-min mini-min left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 풀리퀘 설명된 파일 어디있는지 알려주시면 제가 코드 리뷰 달러가겠습니다 ^___^

@ena-isme
Copy link

우왕 수고하셨습니다! 파일이 아직 안올라온 것 같아용 !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants