Ios 在Alamofire api请求的响应等待期间,是否有方法显示活动指示器或进度条?使用Swift

Ios 在Alamofire api请求的响应等待期间,是否有方法显示活动指示器或进度条?使用Swift,ios,swift,rest,api,alamofire,Ios,Swift,Rest,Api,Alamofire,现在我显示进度条,硬编码为2秒(平均响应时间)。但我希望它是智能的 我的请求是这样的 func makeRequest(to endPoint: String) { Alamofire.request(endPoint).responseJSON{ response in if let value = response.result.value { let responseInJSON = JSON(value) self.

现在我显示进度条,硬编码为2秒(平均响应时间)。但我希望它是智能的

我的请求是这样的

func makeRequest(to endPoint: String) {
    Alamofire.request(endPoint).responseJSON{ response in
        if let value = response.result.value {
            let responseInJSON = JSON(value)
            self._responseInJSON = responseInJSON
        }
    }
}
期待您的帮助。
谢谢。

我希望这能帮助我在评论中指出

func makeRequest(to endPoint: String) {

    // here you can showActivetyIndicator start progressing here
    Alamofire.request(endPoint).responseJSON{ response in
        if let value = response.result.value {
            let responseInJSON = JSON(value)
            self._responseInJSON = responseInJSON
        }
       // here you can hide Your ActivetyIndicator here
    }
}

您只需在Alamofire请求开始之前启动进程,然后在获得API响应后停止。不需要像2秒这样的静态时间。

对于一个简单的GET请求,由于HTTP协议(而不是iOS)的限制,很遗憾这是不可能的。这种事情唯一可能发生的时候是通过比特流下载视频之类的东西,然后只有当服务器首先告诉客户端文件的总大小时

有趣的是,苹果自己的信息和Safari应用程序中的进度条完全是假的。如果你仔细观察它们,你会发现条形图以稳定的速度前进到85%左右,在请求完成之前,它会停止,在这一点上它会跳到末尾。这是由于上述HTTP协议的限制,苹果对此无能为力

但是,您可以显示UIActivityIndicator以向用户显示正在发生网络呼叫,您可以在UI中创建自己的,也可以只调用
UIApplication.shared.networkActivityIndicatorVisible=true
,然后在呼叫结束时调用false

不幸的是,这不是你希望得到的答案,而是真相(

您可以尝试以下方法:

 spin.center = self.view.center
 spin.activityIndicatorViewStyle = .WhiteLarge
 self.view.addSubview(spin)
 spin.startAnimating()
 let url =  NSURL(string:StoreApi)

 let request = NSMutableURLRequest(URL: url!)

 request.HTTPMethod = "GET"
        Alamofire.request(request)
            .responseJSON { response in
                // do whatever you want here
                switch (response.result) {
                case .Success(let JSON):
                //do what you want after success
                case .Failure:

                }//switch close
                //Spin is my activity indicator
                 self.spin.stopAnimating()
                 self.spin.removeFromSuperview()
            }//responseJSON close
你可以试试这个

这里有一种方法可以在扩展中实现,该扩展将它添加到所有UIViewController中

extension UIViewController {
    class func displaySpinner(onView : UIView) -> UIView {
        let spinnerView = UIView.init(frame: onView.bounds)
        spinnerView.backgroundColor = UIColor.init(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)
        let ai = UIActivityIndicatorView.init(activityIndicatorStyle: .whiteLarge)
        ai.startAnimating()
        ai.center = spinnerView.center

        DispatchQueue.main.async {
            spinnerView.addSubview(ai)
            onView.addSubview(spinnerView)
        }

        return spinnerView
    }

    class func removeSpinner(spinner :UIView) {
        DispatchQueue.main.async {
            spinner.removeFromSuperview()
        }
    }
}
要创建和显示微调器,请在视图控制器中执行以下操作:

let sv = UIViewController.displaySpinner(onView: self.view)
除去

UIViewController.removeSpinner(spinner: sv)

Ref:

由于无法预测您的响应时间,因此不可能完全按照响应时间来计时。可以将其硬编码为在2秒钟内填充到某一点,如接近尾声,然后暂停片刻,等待响应返回。然后,您将添加一些内容以使其动画化,以便在响应完全进入后快速完成。您将在完成时在
self之后立即调用最终动画。\u responseInJSON=responseInJSON
。我知道这并不完全是您想要的,只是一个选项