์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ ๋ฒ ์๊ฐ์ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ณผ์ ์ ํ์๋๋ฐ์.
(ํน์ ๋ชป๋ณด์ ๋ถ๋ค์ ์ฌ๊ธฐ ๋ก ์ด๋ํด์ ๋จผ์ ๋ณด๊ณ ์์ฃผ์ธ์!)
์ด๋ฒ์๋ ๋ฐ์์จ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ํ๋ฉด์ ๋์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
WeatherView
๋จผ์ WeatherView๋ก ์ด๋ํด์ ํ์ฌ,24์๊ฐ,์ฃผ๊ฐ ๋ ์จ๋ฅผ ๋ด์ ๋ณ์๋ค์ ๋ง๋ค์ด์ค๋๋ค.
var currentWeather:CurrentWeather!
var hourlyWeathers:[HourlyWeather] = []
var weeklyWeathers:[WeeklyWeather] = []
๋จผ์ ํ์ฌ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ ๋ ์ด๋ธ์ ๋ง๊ฒ ์ธํ ํด์ค๋๋ค.
func setupCurrentWeather() {
self.cityLabel.text = currentWeather.city
self.dateLabel.text = "Today, \(currentWeather.date)"
self.tempLabel.text = "\(currentWeather.temp)"
self.weatherInfoLabel.text = currentWeather.weatherInfo
}
๊ทธ ๋ค์์ผ๋ก ํ ์ด๋ธ๋ทฐ์ ํ ์ด๋ธ๋ทฐ์ ์ ๋ฑ๋กํด์ฃผ์๊ณ dataSource๋ฅผ self๋ก ํด์ค๋๋ค.
func setupTableView() {
weeklyTableView.register(UINib(nibName: "WeeklyTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
weeklyTableView.dataSource = self
}
์ปฌ๋ ์ ๋ทฐ๋ ํ ์ด๋ธ๋ทฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ ํด์ค๋๋ค.
func setupCollectionView(){
hourlyCollectionView.register(UINib(nibName: "HourlyCollectionViewCell", bundle: Bundle.main), forCellWithReuseIdentifier: "Cell")
hourlyCollectionView.dataSource = self
}
HourlyCollectionViewCell
์ปฌ๋ ์ ๋ทฐ์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ํด์ ์ปฌ๋ ์ ๋ทฐ์ ๋ก ์ด๋ํด์ค๋๋ค.
์๋์ ๊ฐ์ด ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ ๋ ์ด๋ธ๊ณผ ์๋ฏธ์ง์ ๋ง๊ฒ ์ธํ ํด์ค๋๋ค.
(์ฌ๊ธฐ์ getWeatherIconFor๋ ์ ๋ฒ ์๊ฐ์ Helpers์์ ์์ด์ฝ์ ์ด๋ฆ์ ์ด๋ฏธ์ง๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ ์ฉํ ๊ฒ์ ๋๋ค.)
class HourlyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var weatherImage: UIImageView!
@IBOutlet weak var timeLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
func generateCell(hourlyWeahter:HourlyWeather){
tempLabel.text = "\(hourlyWeahter.temp)"
timeLabel.text = hourlyWeahter.date
weatherImage.image = getWeatherIconFor(hourlyWeahter.weatherIcon)
}
}
WeeklyTableViewCell
ํ ์ด๋ธ๋ทฐ์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ ํด์ฃผ์ธ์!
class WeeklyTableViewCell: UITableViewCell {
@IBOutlet weak var weekLabel: UILabel!
@IBOutlet weak var weatherImage: UIImageView!
@IBOutlet weak var tempLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
func generateCell(weather:WeeklyWeather) {
weekLabel.text = weather.date
weatherImage.image = getWeatherIconFor(weather.weatherIcon)
tempLabel.text = "\(weather.temp)"
}
}
WeatherView
๋ค์ WeatherView๋ก ๋์์์
์๋์ ๊ฐ์ด DataSource๋ฅผ extension์ผ๋ก ํ์ฅํด์ ํ ์ด๋ธ๋ทฐ ๋ฐ์ดํฐ์์ค๋ฅผ ์ธํ ํด์ค๋๋ค.
์์์ ๋ง๋ค์ด๋์ generateCellํจ์์ ํ๋ผ๋ฏธํฐ๋ก weeklyWeathers์ ๋ด๊ฒจ์๋ WeeklyWeather์ ๋ฃ์ด์ค๋๋ค.
extension WeatherView:UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
weeklyWeathers.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! WeeklyTableViewCell
cell.generateCell(weather: weeklyWeathers[indexPath.row])
return cell
}
}
์ฝ๋ ์ ๋ทฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ ํด์ค๋๋ค.
์ฝ๋ ์ ๋ทฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์์ ๋ง๋ค์ด๋์ generateCellํจ์์ ํ๋ผ๋ฏธํฐ๋ก hourlyWeathers์ ๋ด๊ฒจ์๋ HourlyWeather์ ๋ฃ์ด์ค๋๋ค.
extension WeatherView:UICollectionViewDelegate,UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return hourlyWeathers.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as!
HourlyCollectionViewCell
cell.generateCell(hourlyWeahter: hourlyWeathers[indexPath.item])
return cell
}
}
์ด๋ ๊ฒ ๋ชจ๋ ์์ ์ ํ๊ณ ๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ์์ ์ ์คํํ ํจ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
func setupAll() {
setupCurrentWeather()
setupCollectionView()
setupTableView()
}
์ฌ๊ธฐ๊น์ง WeatherView ์ธํ ์ด ๋๋ฌ๊ตฌ์.
์ด์ ๋ถํฐ๋ WeatherViewController์ WeatherView๋ฅผ ์ธํ ํ๋๋ฒ์ ๋ํด์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
WeatherViewController
๊ฐ์ฅ ๋จผ์ WeatherView๋ฅผ ์ธํ ํด์ค์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด xib๋ก ๋ง๋ nib์ WeatherView๋ก ๋ง๋ค์ด์ค๋๋ค.
weatherView์ ํ๋ ์์ ํ์ฌ ๋ทฐ์ ๋ง๊ฒ ์กฐ์ ํด์ฃผ์๊ตฌ์.
view์ addSubview๋ก weatherView๋ฅผ ๋ง๋ค์ด์ค๋๋ค.(getCurrentWeather,getHourlyWeather,getWeeklyWeather์ ์๋์ ์ค๋ช ํ ๊ฒ์!)
private func setupWeatherView() {
let weatherView = Bundle.main.loadNibNamed("WeatherView", owner: self, options: nil)?.first as! WeatherView
weatherView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
getCurrentWeather(weatherView: weatherView)
getHourlyWeather(weatherView: weatherView)
getWeeklyWeather(weatherView: weatherView)
self.view.addSubview(weatherView)
}
๋จผ์ ํ์ฌ ๋ ์จ๋ฅผ ์ธํ ํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ WeatherView๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ getCurrentWeather์ ๋ง๋ค์ด์ค๋๋ค.
์์์ ์ฐ๋ฆฌ๋ WeatherView์์ currentWeather ๋ณ์๋ฅผ ๋ง๋ค์ด๋์์ฃ ?
์ฌ๊ธฐ์ WeatherView์์ currentWeather์ ์๋ก์ด CurrentWeather ์ธ์คํด์ค๋ก ๋ง๋ค์ด์ค ๋ค
CurrentWeather ์์ ์๋ ๋ฉ์๋์ธ getCurrentWeather์ ์คํ์์ผ์ค ๋ค์
WeatherView์ setupAll์ ํด์ฃผ์ด ๋ชจ๋ ์ธํ ์ ํด์ค๋๋ค.
private func getCurrentWeather(weatherView:WeatherView) {
weatherView.currentWeather = CurrentWeather()
weatherView.currentWeather.getCurrentWeather {
weatherView.setupAll()
}
}
24์๊ฐ ๋ ์จ๋ ํ์ฌ ๋ ์จ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ ํด์ฃผ์ง๋ง getWeeklyWeather์์ ๋ฐ์์จ weeklyWeathers๋ฅผ WeatherView ์์ ์๋
weeklyWeahters๋ก ์ค์ ํด์ค ๋ค weatherView์ ์ปฌ๋ ์ ๋ทฐ๋ฅผ reload์์ผ์ค๋๋ค.
private func getWeeklyWeather(weatherView:WeatherView) {
WeeklyWeather.getWeeklyWeather { (weeklyWeathers) in
weatherView.weeklyWeathers = weeklyWeathers
weatherView.weeklyTableView.reloadData()
}
}
์ฃผ๊ฐ ๋ ์จ๋ 24์๊ฐ ๋ ์จ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ ํด์ค๋๋ค.
private func getHourlyWeather(weatherView:WeatherView) {
HourlyWeather.getHourlyWeather { (hourlyWeathers) in
weatherView.hourlyWeathers = hourlyWeathers
weatherView.hourlyCollectionView.reloadData()
}
}
์ด๋ ๊ฒ ๋ชจ๋ ๋ง์น ํ
viewDidLoad์ setupWeatherView ํจ์๋ฅผ ์คํ์์ผ์ค๋๋ค.
(requestAuthorization ํจ์๋ ์ฌ๊ธฐ ๊ธ์ ์ฐธ์กฐํด์ฃผ์ธ์!)
override func viewDidLoad() {
super.viewDidLoad()
requestAuthorization()
setupWeatherView()
}
์๋์ ๊ฐ์ด ํ์ฌ ์์น์ ์๋ ํ์ฌ ๋ ์จ์ ์์ผ๋ก์ 24์๊ฐ๋์ ๋ ์จ ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก์ 2์ฃผ๊ฐ์ ๋ ์จ๊ฐ ๋์์ง ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค!!!
(์๋ฎฌ๋ ์ดํฐ๋ก ์คํํด์ ์ ํ ๋ณธ์ฌ๊ฐ ์๋ ์์น๋ก ๋์ด์๋ค์... ใ ใ )
์ด๋ ๊ฒ 2ํธ์ ๊ฑธ์น ๋ ์จ ์์๋ณด๊ธฐ๊ฐ ๋๋ฌ๋๋ฐ์.
ํน์๋ผ๋ ๊ถ๊ธํ ์ ์ด ์์ผ์๊ฑฐ๋ ์ง์ ํ์ค ๋ถ๋ถ์ด ์์ผ์๋ฉด ์ธ์ ๋ ๋๊ธ ๋ฌ์์ฃผ์ธ์!!
๋๊ธ