본문 바로가기

iOS

[iOS] 서버에 데이터 요청하기 : URLSessionDataTask

guard let url: URL = URL(string: " ~~ url ~~ ") else { return } 
// url에 요청
 
let session: URLSession = URLSession(configuration: .default)
// session을 만들어줌

// dataTask를 만들어 줌 -> url로 요청함
// 뒤의 클로저는 요청에 대한 서버의 응답이 왔을 때 호출될 클로저
let dataTask: URLSessionDataTask = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) in
	if let error = error {
    	print(error.localizedDescription)
        return
    }
    
    guard let data = data else { return }
    // 받아온 데이터를 가지고 JSONDecoder를 사용해서 APIResponse 형식으로 decode
    do {
    	let apiResponse: APIResponse = try JSONDecoder().decode(APIResponse.self, from: data)
        self.friends = apiResponse.results
        // APIResponse에 결과가 들어왔다면 friends에 저장

	// tableView reload는 메인 스레드에서 호출해줘야 됨 !!!!!! (현재 백그라운드)
        // closure는 메인 스레드에서 동작하지 않음. 백그라운드에서 동작
        // 네트워크를 끝내고 받아온 데이터를 처리
        self.tableView.reloadData()
    } catch(let arr) {
    	print(err.localizedDescription)
    }
}

dataTask.resume()
// 이를 호출해주면 이 때 dataTask를 실행하고 서버에 요청

tableView.reloadData() 는 메인 스레드에서 호출해줘야 하기 때문에 아직은 잘못된 코드

 

Closure는 당장 실행할 코드가 아니고  요청에 대한 응답이 왔을 때 실행하는 코드

실질적으로 우리가 실행하는 코드는 session 생성, dataTask 추가, dataTask 실행 

 

 

 

 

[LECTURE] 3) 서버에 데이터 요청하기 : edwith

강의 영상 - 부스트코스

www.edwith.org