class NetworkManager {
// 서버에서 데이터를 불러오는 메서드
func fetchData<T: Decodable>(url: URL, completion: @escaping (T?) -> Void) {
let session = URLSession(configuration: .default)
session.dataTask(with: URLRequest(url: url)) { data, response, error in
guard let data, error == nil else {
print("데이터 로드 실패")
completion(nil)
return
}
let successRange = 200..<300
if let response = response as? HTTPURLResponse, successRange.contains(response.statusCode) {
guard let decodedData = try? JSONDecoder().decode(T.self, from: data) else {
print("JSON 디코딩 실패")
completion(nil)
return
}
completion(decodedData)
} else {
print("응답 오류")
completion(nil)
}
}.resume()
}
}
// Alamofire
func fetchData<T: Decodable>(url: URL, completion: @escaping (T?) -> Void) {
AF.request(url)
.validate(statusCode: 200..<300)
.responseDecodable(of: T.self) { response in
switch response.result {
case .success(let decodedData):
completion(decodedData)
case .failure(let error):
print("데이터 로드 실패: \(error.localizedDescription)")
completion(nil)
}
}
}