当前位置: 首页 > 知识库问答 >
问题:

如何使用完成处理程序和参数调用函数

田念
2023-03-14

我有一个func getData(已完成:@escaping ()-

现在我想在此func中添加附加参数,以允许用户修改alamofire请求的URL,并获得自定义响应。参数将在其他文本字段中设置。但现在当我调用DownloadRepositories()时,我不能省略调用完成参数。

如何避免在其中调用完成处理程序,或者我应该实现其他什么完成处理程序?

当前alamofire请求

 class DataClass {

   func getData(completed: @escaping () -> ()){
   //alamofire request
   Alamofire.request(url).responseJSON{
   //reponse
   completed()
   }

 }

这是实施

class OtherVC {

  var dataClass = DataClass()

  @objc func searchBtnTapped(sender: UIButton!){      
      dataclass.getData(){
          self.TableView.reloadData()
      }
  }
}

我想做的是

class DataClass {

  func downloadRepositories(completed: @escaping () -> (), parameter1: String, parameter2: String) {

  let parameters: Parameters = [ "parameterA": parameter, "parameterB": parameter2 ]

  Alamofire.request(url, parameters: parameters).responseJSON{
      //response
      completed()  
  }

修改func的实现

 class OtherVC {

  var dataClass = DataClass()

  @objc func searchBtnTapped(sender: UIButton!){      
      dataclass.getData(parameter1: someTextField.text, parameter2: someTextField2.text){
          self.TableView.reloadData()
      }
   }
 }

当然,我知道在func调用中像这样传递参数是不可能的,但是如何用另一种方式呢?


共有2个答案

夏侯弘量
2023-03-14

你在正确的轨道上)如果你想这样调用func:

dataclass.getData(parameter1: someTextField.text, parameter2: someTextField2.text){
      self.TableView.reloadData()
  }

您只需要像这样更改参数顺序:

  func downloadRepositories(parameter1: String, parameter2: String, completed: @escaping () -> ()) 

如果我理解正确,并且您希望使用尾部闭包,那么仅此而已

董法
2023-03-14

像这样使用:

func downloadRepositories(parameter1: String, parameter2: String, completed: @escaping () -> ()) {

let parameters: Parameters = [ "parameterA": parameter, "parameterB": parameter2 ]

Alamofire.request(url, parameters: parameters).responseJSON {
  //response
  completed()  
}
 类似资料:
  • 我喜欢确定Java运行时环境可用并检查它们的版本。我的代码将输出正确的jre路径,但无法执行java.exe. 当程序路径是变量时,用批处理脚本中的参数调用程序的正确方法是什么? 我的剧本 错误

  • 我在地图中的几个位置进行反向地理编码,并希望将其包装为某种常用方法。我所拥有的是作为工作起点的: 但是,如果我想在我的完成方法中添加另一个参数,将会向我的视图返回错误,如下所示: 如果error为,那么我的将失败,因为错误为nil且访问错误。但我不能这样做,因为参数与完成处理程序不匹配。 因此,如果我有一个nil错误,我将如何调用我的完成处理程序?

  • 我基本上想有一个可选的完成处理器,没有参数被传递回来。这是我目前掌握的情况,但显然是错误的。 我不想在完成块中传递任何参数。我只想知道网络调用何时完成,以便刷新UI。我不想在这里刷新UI,因为我希望它充当刷新数据的通用函数。我之所以希望完成处理程序是可选的,是因为有时候刷新完成后我不需要做任何事情。 我也很困惑“逃离”是什么意思。当我做这样的事情时,我通常会有它,但任何清晰都会很好。我在网上做了一

  • 我正在制作一个显示化学反应动画的应用程序。每个原子都是一个SCNSphere,并用SCNActions动画。我试图使用runAction()中的完成处理程序在当前操作完成后调用下一个动画,因为每个原子必须进行许多不同的运动。 这只是我为简化过程而编写的一些测试代码,实际代码将在对象数组中循环。 语句工作正常,只有在操作完成后才会调用它,但是新的SCNAction不会触发。我是否遗漏了什么来启动下一

  • 问题内容: 我是AWS Lambda的新手,我已使用处理程序创建了Lambda函数 这是自定义处理程序,现在我想从我的Java程序中调用它,我需要如何做。 问题答案: 此类中的2种方法应该可以为您提供帮助。一种是用于需要传递有效负载的情况,另一种是用于有效负载为null的情况。 但是,您需要记住一件事:函数名称可能与处理程序不同(后者在)。调用其功能时 不 使用该处理程序名称。 因此,如果您有一个

  • 问题内容: 我有一个字段,我想在其中应用的变体。 该字段与ajax调用绑定在一起,当用户更改输入时,服务器端将处理数据,但是,我不想太频繁地进行调用。 假设用户要输入一个真正的字符串,我希望仅在用户完成将要键入的单词后才能进行呼叫。不过,我不想使用诸如模糊之类的事件。有什么比实现更好的方法呢? 问题答案: 使用在角> 1.3 没有-在标记中: 在您的后备控制器/范围内 然后,您将仅在1000ms不