개발 - iOS SwiftUI

iOS SwiftUI HTTP 요청 dataTask 동기 처리 예제

개미v 2023. 10. 17. 13:52

HTTP 요청 처리를 하는데 dataTask는 기본이 비동기 처리 입니다.
비동기를 동기로 바꾸는 옵션값 같은것이 없습니다.
그래서 세마포어로 처리 해야 합니다.


하면 할 수록 Swift 이상함 ㅋㅋ

import SwiftUI
import WebKit

struct IntroView: View {

    var body: some View {
        VStack {
        }
        .onAppear {
            startMain()
        }
    }
    
    func startMain() {
        // HTTP 요청
        let url = URL(string: Define.serverUrl + "/system/selectVersion.ajax")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        
        // HTTP 요청 결과 처리
        let semaphore = DispatchSemaphore(value: 0) // 세마포어 설정
        let dataTask = URLSession.shared.dataTask(with: request) {data, response, error in
            print("1111")

            ...
            
            semaphore.signal() // 대기에서 깨어남
        }
        
        // DataTask 시작
        dataTask.resume()
        semaphore.wait() // 대기 시킴

        print("2222")
    }
}

 

이렇게 하면
1111
2222
출력 됩니다.