방법 1 (박스오피스 앱)
func getData() {
// 1. URL 만들기
guard let url = URL(string: movieURL) else { return }
// 2. URLSession 만들기
let session = URLSession(configuration: .default)
// 3. URLSession 인스턴스에게 task 주기
let task = session.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error!)
return
}
guard let JSONdata = data else { return }
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(MovieData.self, from: JSONdata)
self.movieData = decodedData
DispatchQueue.main.async {
self.table.reloadData()
}
} catch {
print(error)
}
}
// 4. task 시작
task.resume()
}
방법 2 (날씨 앱)
func getWeather(completion: @escaping (Result<WeatherResponse, NetworkError>) -> Void) {
// 1. URL - API 호출을 위한 URL
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=seoul&appid=\(apiKey)")
guard let url = url else {
return completion(.failure(.badUrl))
}
// 2. URLSession 만들고 task 주기
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
return completion(.failure(.noData))
}
// Data 타입으로 받은 리턴을 디코드
let weatherResponse = try? JSONDecoder().decode(WeatherResponse.self, from: data)
// 성공
if let weatherResponse = weatherResponse {
print(weatherResponse)
completion(.success(weatherResponse)) // 성공한 데이터 저장
} else {
completion(.failure(.decodingError))
}
}.resume() // 3. dataTask 시작
}
'Language > Swift' 카테고리의 다른 글
iOS - 프로세스(Process) / 스레드(Thread) (0) | 2022.10.31 |
---|---|
iOS - AppDelegate (0) | 2022.10.27 |
Swift - 05 (0) | 2022.02.08 |
Swift - 04 (0) | 2022.02.01 |
Swift - 03 (0) | 2022.01.26 |
Comment