dev._.note

[Swift] URLSession 본문

Dev/SWIFT

[Swift] URLSession

Laena 2024. 1. 7. 17:50

URLSession

URLSession은 네트워크 데이터를 가져오거나 보내는 작업을 수행합니다.

URLSession의 주요 특징

  • 비동기적 네트워킹 (Asynchronous Networking) URLSession은 비동기적으로 네트워크 요청을 처리하므로, 네트워크 작업이 백그라운드에서 수행될 수 있습니다. 이는 앱의 성능을 향상시키고 응답성을 유지하는 데 도움이 됩니다.
  • 다양한 데이터 전송 방식 지원 URLSession을 사용하여 데이터를 업로드하거나 다운로드할 수 있으며, JSON, 이미지, 파일 등 다양한 데이터 형식을 처리할 수 있습니다. 이번 숙련 챕터에서의 예제는 JSON 데이터를 다운로드하여 사용합니다.
  • 캐시와 쿠키 관리 URLSession은 네트워크 응답을 캐싱하고 쿠키를 관리할 수 있는 기능을 제공합니다.

GET 예시

import Foundation

// URLSession 인스턴스 생성
let session = URLSession.shared

// URL 생성
if let url = URL(string: "<https://api.example.com/data>") {
    // URLSessionDataTask를 사용하여 비동기적으로 데이터 요청
    let task = session.dataTask(with: url) { (data, response, error) in
        if let error = error {
            print("Error: \\(error)")
        } else if let data = data {
            // 데이터를 받아온 후 처리하는 로직을 작성
            print("Received data: \\(data)")
        }
    }
    
    // 네트워크 요청 시작
    task.resume()
}

 

URLRequest를 사용한 POST 예시

import Foundation

// URLSession 인스턴스 생성
let session = URLSession.shared

// URL 생성
if let url = URL(string: "https://api.example.com/data") {
  // URLSessionDataTask를 사용하여 비동기적으로 데이터 요청
  
  // URLRequest 생성
  var request = URLRequest(url: url)
  
  // HTTP 메서드 설정 (POST)
  request.httpMethod = "POST" // GET / PUT / DELETE 사용 가능

  // HTTP 헤더 설정
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
  
  // HTTP Body에 보낼 데이터 설정 (JSON 형식)
  let parameters: [String: String] = [
    "value1": "example value",
    "value2": "example value"
    // 추가적인 필요한 데이터 추가 가능
  ]
  
  // HTTP Body에 JSON 데이터 설정
  request.httpBody = try? JSONEncoder().encode(parameters)
  
  let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
      print("Error: \(error)")
    } else if let data = data {
      // 데이터를 받아온 후 처리하는 로직을 작성
      print("Received data: \(data)")
    }
  }
  
  // 네트워크 요청 시작
  task.resume()
}

'Dev > SWIFT' 카테고리의 다른 글

[Swift] lazy란?  (0) 2024.01.10
[Swift] Decodabe, Encodable, Codable  (0) 2024.01.09
[Swift] URL 구성요소  (1) 2024.01.04
[Swift] struct와 class  (1) 2024.01.03
[Swift] Kiosk 팀과제 2  (2) 2024.01.02