[swift] - 네트워크 활동 표시기를 사용하여 Alamofire 네트워크 요청 시각적으로 나타내기

Alamofire은 Swift에서 많이 사용되는 네트워킹 라이브러리입니다. Alamofire를 사용하면 JSON 요청 및 응답 처리, 데이터 업로드 및 다운로드 등을 간단하게 처리할 수 있습니다. 이러한 네트워크 요청이나 응답이 진행 중인지 시각적으로 표시하려면 네트워크 활동 표시기를 사용할 수 있습니다.

네트워크 활동 표시기 생성

네트워크 활동 표시기를 생성하려면 UIKit에서 제공하는 UIActivityIndicatorView 클래스를 사용할 수 있습니다. UIActivityIndicatorView는 애니메이션을 통해 활동 표시기를 보여줍니다.

import UIKit

class NetworkActivityIndicator {

    static let shared = NetworkActivityIndicator()
    private let indicatorView = UIActivityIndicatorView()

    private init() {
        indicatorView.style = .large
        indicatorView.color = .gray
    }

    func show() {
        DispatchQueue.main.async {
            guard let keyWindow = UIApplication.shared.windows.filter({$0.isKeyWindow}).first else { return }
            keyWindow.addSubview(self.indicatorView)
            self.indicatorView.center = keyWindow.center
            self.indicatorView.startAnimating()
        }
    }

    func hide() {
        DispatchQueue.main.async {
            self.indicatorView.stopAnimating()
            self.indicatorView.removeFromSuperview()
        }
    }

}

위의 코드에서는 NetworkActivityIndicator이라는 싱글톤 클래스를 생성하였습니다. show() 메서드를 호출하면 활동 표시기가 표시되고, hide() 메서드를 호출하면 활동 표시기가 사라집니다.

Alamofire와 함께 사용하기

Alamofire를 사용하여 네트워크 요청을 보낼 때마다 네트워크 활동 표시기를 표시하고 숨길 수 있습니다. 아래의 예제는 Alamofire를 사용하여 GET 요청을 보내며, 요청 전후에 네트워크 활동 표시기를 표시하고 숨기는 방법을 보여줍니다.

import Alamofire

class NetworkManager {

    static let shared = NetworkManager()

    private init() {}

    func getData(url: String, completion: @escaping ([String: Any]?, Error?) -> Void) {
        NetworkActivityIndicator.shared.show()
        
        AF.request(url).responseJSON { response in
            NetworkActivityIndicator.shared.hide()
            
            switch response.result {
            case .success(let data):
                if let jsonData = data as? [String: Any] {
                    completion(jsonData, nil)
                } else {
                    completion(nil, NSError(domain: "Parsing error", code: 0, userInfo: nil))
                }
            case .failure(let error):
                completion(nil, error)
            }
        }
    }

}

위의 코드에서는 NetworkManager라는 클래스를 생성하여 Alamofire와 함께 사용하였습니다. getData 메서드를 호출하면 해당 URL로 GET 요청을 보내고, 요청 전후에 네트워크 활동 표시기를 표시하고 숨깁니다. 요청이 성공하면 완료 핸들러에 JSON 데이터를 전달하고, 요청이 실패하면 에러를 전달합니다.

이제 위의 예제를 참고하여 네트워크 활동 표시기를 사용하여 Alamofire 네트워크 요청을 시각적으로 나타낼 수 있습니다.