-
[ios - Swift] URLSession DataTask 동기처리ios 2020. 11. 14. 18:00
URLSessio Http Requst 처리를 기다렸다가 다음 작업을 해야 할 때가 있는데 비동기 처리방식으로 인해 불편했던 적이 있는데
아래와 같은 방법으로 해결하도록 하겠습니다.
URLSession을 사용해 Http 접속을 하는 방법을 모르시는 분은 아래 주소를 참조해 주세요.
2020/11/12 - [스위프트] - Swift URLSession으로 Json 데이터 가져오기
지난 시간에 작성한 코드의 실행해보면 completionHandler가 실행되기 전에 변수 httpContent의 값을 리턴하기 때문에 nil이 나오게 됩니다.
이것을 두 가지 방법으로 동기 처리하도록 하겠습니다.
1. While loop
resume을 실행 후 While loop에서 completionHandler가 호출될 때까지 대기하고 있습니다.
completionHandler가 호출되고 모든 작업이 완료된다면 bool 변숫값을 false로 변경해 loop를 빠져나올 수 있도록 합니다.
2. 세마포어
세마포어란 여러 프로세스에서 자원에 접근을 막는 것이라고 정의되어있습니다.
세마포어의 value 값이 0 이하인 경우 실행되지 않으며 0 이상일 경우 value 값이 감소되면서 대기합니다.
let semaphore = DispatchSemaphore(value: 0)
value의 값이 0 일 경우 signal() 이 호출될때까지 대기합니다.
semaphore.wait()
semaphore.signal()
이제 기존 while loop를 사용한 함수를 아래와 같이 수정하면 비동기를 동기 처리해서 사용 가능합니다.
'ios' 카테고리의 다른 글
[ios - Swift] 데이트 포맷 형식 (0) 2020.11.16 [ios - Swift] Scrollview AutoLayout 사용하기 (0) 2020.11.16 [ios - Swift] Codable을 사용한 Json 데이터 가져오기 (0) 2020.11.13 [ios - Swift] URLSession으로 Json 데이터 가져오기 (0) 2020.11.12 [ios - Swift] Navigation Controller 사용하기 (0) 2020.11.11