我有一个函数getData(completed: @escaping ()->())
,它在一个类中使用完成处理程序创建了 alamofire 请求。当alamofire结束其工作时,在此函数内部,我调用completed()
通知该函数结束了其工作。点击按钮后,在其他viewcontroller中调用此函数,但没有完成处理程序,然后在此调用内,使用下载的数据重新加载tableview,如下所示。
现在,我想向此功能添加其他参数,以允许用户修改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()
}
修改后的功能的实现
class OtherVC {
var dataClass = DataClass()
@objc func searchBtnTapped(sender: UIButton!){
dataclass.getData(parameter1: someTextField.text, parameter2: someTextField2.text){
self.TableView.reloadData()
}
}
}
我当然知道不可能像这样在func调用中传递参数,但是该怎么做呢?
答案 0 :(得分:0)
像这样使用:
func downloadRepositories(parameter1: String, parameter2: String, completed: @escaping () -> ()) {
let parameters: Parameters = [ "parameterA": parameter, "parameterB": parameter2 ]
Alamofire.request(url, parameters: parameters).responseJSON {
//response
completed()
}
答案 1 :(得分:0)
您在正确的轨道上) 如果要这样调用func:
dataclass.getData(parameter1: someTextField.text, parameter2: someTextField2.text){
self.TableView.reloadData()
}
您只需要这样的更改参数顺序:
func downloadRepositories(parameter1: String, parameter2: String, completed: @escaping () -> ())
如果我理解正确,并且您想使用Trailing Closures,那就够了