【发布时间】:2024-01-08 07:52:01
【问题描述】:
我有一个函数 getData(completed: @escaping ()->()),它在一个类中创建带有完成处理程序的 alamofire 请求。当 alamofire 结束它的工作时,在这个函数内部我调用completed() 来通知该函数结束了它的工作。此函数在按钮点击后在其他视图控制器中调用,但没有完成处理程序,然后在此调用中我使用下载的数据重新加载 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()
}
修改后func的实现
class OtherVC {
var dataClass = DataClass()
@objc func searchBtnTapped(sender: UIButton!){
dataclass.getData(parameter1: someTextField.text, parameter2: someTextField2.text){
self.TableView.reloadData()
}
}
}
我当然知道这样在 func 调用中传递参数是不可能的,但是怎么能这样呢?
【问题讨论】: