반응형
앱을 개발하며 날씨를 받아오는 기능이 필요해서 WeatherKit 을 사용해봤습니다.
WeatherKit은 애플 개발자 계정이 있어야 사용가능합니다~
제공 데이터
더 자세한 내용은 WWDC2022 와 데이터셋 을 확인 해주세요
1. Key 생성
인증서 페이지에서 key를 생성합니다.
2. AppID 생성
번들 아이디는 프로젝트의 번들아이디와 같아야 합니다.
capabilities 와 appservices 에서 weatherKit 을 체크합니다.
3. Xcode 기본 설정
Capablility 를 클릭해서 weatherKit 을 추가합니다.
날씨 정보 받기
사용자의 위치를 받기위해 설정 합니다.
class WeatherTestViewController: UIViewController {
let weatherService = WeatherService()
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
setLocationManager()
}
}
extension WeatherTestViewController: CLLocationManagerDelegate {
private func setLocationManager() {
locationManager.delegate = self
// 거리 정확도
locationManager.desiredAccuracy = kCLLocationAccuracyBest
// 위치사용 알림
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
}
날씨를 받아올 함수를 만듭니다.
func getWeather(location: CLLocation) {
Task{
do{
let result = try await weatherService.weather(for: location)
print("날씨정보:")
print(result)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("currentMetadata: ",result.currentWeather.symbolName)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("Current: ",result.currentWeather)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily first :",result.dailyForecast.first!)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily: ",result.dailyForecast.forecast.first!.date)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily2: ",result.dailyForecast.forecast[1])
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("minute: ",result.minuteForecast)
} catch {
print(error.localizedDescription)
}
}
}
위치 가 변경되면 날씨를 받아오는 함수를 호출합니다.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
print("위치 업데이트!")
print("위도 : \(location.coordinate.latitude)")
print("경도 : \(location.coordinate.longitude)")
locationManager.stopUpdatingLocation()
getWeather(location: location)
}
}
// 위치 가져오기 실패
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("error")
}
전체 코드
import WeatherKit
import CoreLocation
class WeatherTestViewController: UIViewController {
let weatherService = WeatherService()
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
setLocationManager()
}
}
extension WeatherTestViewController: CLLocationManagerDelegate {
private func setLocationManager() {
locationManager.delegate = self
// 거리 정확도
locationManager.desiredAccuracy = kCLLocationAccuracyBest
// 위치사용 알림
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func getWeather(location: CLLocation) {
Task{
do{
let result = try await weatherService.weather(for: location)
print("날씨정보:")
print(result)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("currentMetadata: ",result.currentWeather.symbolName)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("Current: ",result.currentWeather)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily first :",result.dailyForecast.first!)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily: ",result.dailyForecast.forecast.first!.date)
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("daily2: ",result.dailyForecast.forecast[1])
print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
print("minute: ",result.minuteForecast)
} catch {
print(error.localizedDescription)
}
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
print("위치 업데이트!")
print("위도 : \(location.coordinate.latitude)")
print("경도 : \(location.coordinate.longitude)")
locationManager.stopUpdatingLocation()
getWeather(location: location)
}
}
// 위치 가져오기 실패
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("error")
}
}
https://www.youtube.com/watch?v=4J80kTRFL70&t=285s
반응형
반응형
'iOS > swift' 카테고리의 다른 글
Swift) 제네릭 (Generics)활용 APICallRequest 함수 간소화 (0) | 2023.09.04 |
---|---|
[Swift 공식문서 정리] - 클래스와 구조체 (Classes and Structures) (0) | 2022.02.20 |
[Swift 공식문서 정리] - 열거형 (Enumerations) (0) | 2022.02.05 |
[Swift 공식문서 정리] - 클로저 (Closures) (0) | 2021.11.23 |
[Swift 공식문서 정리] - 함수 (Functions) (0) | 2021.11.10 |