Swift 네트워킹 방법

방법 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