代码之家  ›  专栏  ›  技术社区  ›  Utku Dalmaz

Alamofire服务呼叫多次

  •  0
  • Utku Dalmaz  · 技术社区  · 6 年前
    Alamofire.request("https://example.com/writecomment.php", method: .post, parameters: parameters).validate().responseJSON { response in
                switch response.result {
                case .success:
                    if let json = response.result.value {
                        var success = 0
                        if let dictJSON = json as? [String: AnyObject] {
                            if let successInteger = dictJSON["success"] as? Int {
                                success = successInteger
                                if success == 1
                                {
                                    //succes
                                }
                            }
                        }
                    }
                case .failure(_):
                    return
                }
            }
    

    有时 当用户点击按钮时多次触发服务呼叫。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Lal Krishna    6 年前

    例子::

    var isAPICalling = false
    
      @IBAction func btnTapped(_ sender: UIButton) {
       if isAPICalling == false
       {
           isAPICalling = true
           self.APICalling() // Your API calling method
       }
     }
    

    APICalling() 方法集 isAPICalling = false

    其他选择:

    使用 ActivityIndicator 当您请求时间开始指示灯和响应后停止指示灯时。所以你不能点击按钮。

        2
  •  0
  •   Pankaj K.    6 年前

    您可以不使用标志做一件事,如果您有按钮出口,那么只需在执行按钮点击操作时选择按钮状态。

    然后调用API,得到响应后,使按钮状态正常。所以当用户点击按钮时,它只会调用一次。

        @IBAction func btnApiAction(_ sender: Any) {
           if btnAPI.isSelected == false {
              btnAPI.isSelected = true            
              //Call API here
           }else {
            //Do nothing here
           }
         }
    

    如果API调用失败或出现任何错误,也可以将按钮状态更改为“正常”,以便用户可以再次单击按钮。

        3
  •  0
  •   Lal Krishna    6 年前

    禁用 UIButton 当你调用API时。并在api调用完成时启用。

    @IBAction func didTapButton(_ sender: UIButton) {
        sender.isEnabled = false
        Alamofire.request(/* Params */) { response in 
             sender.isEnabled = true
             // parse response - response.result
        }
    }
    

    ActivityIndicatorView 到按钮视图,并在完成时移除以获得更好的用户体验。