У меня есть func getData(completed: @escaping ()->())
, который создает alamofire запрос с обработчиком завершения в одном классе.Когда alamofire завершает свою работу, внутри этой функции я вызываю completed()
, чтобы уведомить эту функцию о завершении своей работы.Эта функция вызывается в другом viewcontroller после нажатия кнопки, но без обработчика завершения, а затем внутри этого вызова я перезагружаю таблицу с загруженными данными, как показано ниже.
Теперь я хочу добавить к этому параметру дополнительные параметры, чтобы пользователь мог изменить URL
запроса alamofire и получить пользовательский ответ.Параметры будут установлены в других текстовых полях.Но теперь, когда я вызываю 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, как это, но как это сделать другим способом?