-
[ios - Swift] URLSession으로 Json 데이터 가져오기ios 2020. 11. 12. 20:00
1. 준비 단계
Json을 받아올 Rest API URL이 필요하기 때문에 환율정보를 받을 수 있는 API 주소를 가져왔다.
아래 사이트에서 환율 정보를 가져올 수 있는 주소를 복사 후 변수에 넣는다.
학습에 사용된 Json 데이터는 아래와 같은 Key, Value 형식의 리스트를 가진다.
2. Json 파싱
우선 사용할 함수를 살펴보면 아래와 같은 내용을 확인할 수 있다.
func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
request : URL, 캐시 정책, 요청 유형, 본문 데이터 또는 본문 스트림 등을 제공하는 URL 요청 개체
completionHandler : 로드 요청이 완료되면 호출될 핸들러이며 data, response, error 값을 확인할 수 있다.
이 핸들러는 델리게이트 큐에서 실행된다.
이제 함수를 만들어 사용해 보도록 하자.
func GetURLSessionData() { let newsAddress : String = "https://api.manana.kr/exchange.json" let task = URLSession.shared.dataTask(with: URL(string: newsAddress)!) { (data, response, error) in if let pData = data { do { let json = try JSONSerialization.jsonObject(with: pData, options:[]) as! Array<Dictionary<String, Any>> for (idx, value) in json.enumerated() { if let symbol = value["symbol"] { print("\(idx) - \(symbol)") } } } catch { } } } task.resume() }
task 변수를 선언 후 dataTask 함수의 클로저를 사용해 통신이 완료되면 데이터를 처리할 수 있도록 하였다.
이때 task 상수는 URLSessionTask 상속받은 URLSessionDataTask이며 다운로드 한 데이터를 메모리의 앱으로 직접 반환하는 URL 세션 작업이다.
resume() 함수를 통해 dataTask를 작업을 실행시키며 아래와 같은 결과를 콘솔에서 확인할 수 있다.
dataTask는 비동기 작업이기 때문에 주의해야 한다.
task.resume() print("완료")
resume() 사용 후 print를 사용했지만 print 구문이 먼저 나오는 것을 확인 할 수 있다.
'ios' 카테고리의 다른 글
[ios - Swift] Scrollview AutoLayout 사용하기 (0) 2020.11.16 [ios - Swift] URLSession DataTask 동기처리 (0) 2020.11.14 [ios - Swift] Codable을 사용한 Json 데이터 가져오기 (0) 2020.11.13 [ios - Swift] Navigation Controller 사용하기 (0) 2020.11.11 [ios - Swift] Navigation Bar 숨기기 (0) 2020.11.10