[swift] - 네트워크 활동 표시기를 사용하여 Alamofire 네트워크 요청 상태에 대한 알림 기능 추가하기

Alamofire는 iOS 개발을 위한 인기있는 네트워킹 라이브러리입니다. 이 라이브러리를 사용하면 네트워크 요청을 보내고 응답을 처리하는 작업을 간편하게 수행할 수 있습니다. 이번에는 Alamofire를 사용하여 네트워크 활동 표시기를 추가하고, 네트워크 요청의 상태에 따라 사용자에게 알림을 표시하는 방법에 대해 알아보겠습니다.

1. 네트워크 활동 표시기 추가하기

네트워크 요청을 보내기 전에, 사용자에게 알리기 위해 활동 표시기를 추가해야 합니다. SwiftUI를 사용하여 간단하게 활동 표시기를 추가하는 예제를 보겠습니다.

import SwiftUI

struct ContentView: View {
    @State private var isLoading = false

    var body: some View {
        VStack {
            if isLoading {
                ProgressView()
                    .onAppear {
                        // 네트워크 요청 전에 isLoading 상태를 true로 설정
                        isLoading = true
                    }
                    .onDisappear {
                        // 네트워크 요청이 완료되면 isLoading 상태를 false로 설정
                        isLoading = false
                    }
            }
            
            Button("네트워크 요청 보내기") {
                // 네트워크 요청 코드 작성
            }
        }
    }
}

위 코드에서는 @State 속성인 isLoading을 사용하여 네트워크 요청의 진행 상태를 추적합니다. ProgressView는 요청이 진행 중일 때 보여지며, onAppearonDisappear 함수를 사용하여 isLoading 상태를 업데이트합니다.

2. Alamofire를 사용하여 네트워크 요청 보내기

활동 표시기를 추가한 후에는 Alamofire를 사용하여 실제 네트워크 요청을 보낼 수 있습니다. 아래 코드는 GET 요청을 보내는 예제입니다.

import Alamofire

func fetchUsers() {
    AF.request("https://api.example.com/users")
        .responseJSON { response in
            switch response.result {
            case .success(let JSON):
                // 요청이 성공적으로 완료되었을 때 처리할 작업
            case .failure(let error):
                // 요청이 실패했을 때 처리할 작업
            }
        }
}

위 코드에서는 AF.request 함수를 사용하여 네트워크 요청을 보냅니다. 요청의 성공 또는 실패에 따라 알맞은 처리 작업을 수행하면 됩니다.

3. 네트워크 요청 상태에 따른 알림 기능 추가하기

네트워크 요청이 완료되면 사용자에게 알림을 표시하는 기능을 추가할 수 있습니다. SwiftUI에서는 Alert를 사용하여 간단하게 알림을 표시할 수 있습니다. 다음 예제에서는 요청이 실패한 경우에만 알림을 표시하는 기능을 추가한 코드입니다.

struct ContentView: View {
    // ...
    @State private var showAlert = false
    @State private var alertMessage = ""
    
    var body: some View {
        // ...
            Button("네트워크 요청 보내기") {
                AF.request("https://api.example.com/users")
                    .responseJSON { response in
                        switch response.result {
                        case .success:
                            // 요청 성공
                            isLoading = false
                        case .failure(let error):
                            // 요청 실패
                            isLoading = false
                            showAlert = true
                            alertMessage = "네트워크 요청에 실패했습니다."
                        }
                    }
            }
        // ...
        .alert(isPresented: $showAlert) {
            Alert(title: Text("알림"),
                  message: Text(alertMessage),
                  dismissButton: .default(Text("확인")))
        }
    }
}

위 코드에서는 @State 속성인 showAlertalertMessage를 사용하여 알림의 표시 여부와 메시지를 관리합니다. 요청이 실패한 경우 showAlert를 true로 설정하고, alertMessage에 적절한 메시지를 저장하여 알림이 표시되도록 합니다. alert 함수를 사용하여 알림을 표시합니다.

이러한 방식으로 Alamofire를 활용하여 네트워크 요청 상태에 따른 알림 기능을 손쉽게 추가할 수 있습니다. 참고로, 네트워크 활동 표시기와 알림이 필요한 화면에서는 SwiftUI의 뷰 계층 구조에 맞게 코드를 작성하면 됩니다.

참고 자료