
오늘은 Swift에서 서버와 통신하기 위한 기본적인 네트워크 메서드에 대해 학습했습니다.
private func fetchData<T: Decodable>(url: URL, completion: @escaping (T?) -> Void)
T를 사용하여 다양한 모델 타입에 대응 가능Decodable 프로토콜을 채택한 타입만 사용 가능completion 클로저 사용 (@escaping)let session = URLSession(configuration: .default)
session.dataTask(with: URLRequest(url: url)) { data, response, error in
guard let data = data, error == nil else {
print("데이터 로드 실패")
completion(nil)
return
}
// ...
}
dataTask를 통해 실제 네트워크 요청 수행guard let을 사용한 안전한 옵셔널 바인딩let successRange = 200..<300
if let response = response as? HTTPURLResponse,
successRange.contains(response.statusCode) {
// ...
}
as?를 통한 타입 캐스팅으로 HTTP 응답 확인guard let decodedData = try? JSONDecoder().decode(T.self, from: data) else {
print("JSON 디코딩 실패")
completion(nil)
return
}
completion(decodedData)
JSONDecoder를 사용하여 받은 데이터를 모델 객체로 변환// 사용 예시
struct User: Decodable {
let id: Int
let name: String
}
let url = URL(string: "https://api.example.com/user/1")!
fetchData(url: url) { (user: User?) in
if let user = user {
print("사용자 정보: \(user.name)")
}
}