Я пытаюсь создать такую архитектуру:
VC вызывает метод экземпляра Facade для запуска сетевого запроса.
Фасад передает строку в метод экземпляра Networking, который возвращает объект Data
,Этот Data
объект передается другому классу по имени Parse для анализа и создания объекта.
Я ищу очень простой способ получения данных из обработчика завершения, но в итоге просто вызываю методы в цепочке, которая ни к чему не приводит.Пока я в основном могу передавать данные обратно в Facade, реализовав обработчик завершения в методе Networking Instance.Когда я вызываю метод экземпляра Networking makeAPIRequest(_:String, _:(Data)->Void) -> Void
, я получаю обратный вызов в свой класс Facade, но он не устанавливает переменную экземпляра.
Метод экземпляра фасада
func grabDataWithString(string: String) -> Data?{
networking.makeAPIRequest(apiString: string) { (data) in
self.dataObject = data
}
return self.dataObject!
}
Метод сетевого экземпляра
func makeAPIRequest(apiString: String, completion: @escaping (Data) -> Void) -> Void {
guard let url: URL = URL(string: apiString) else{
print("ERROR no URL")
return
}
let urlRequest = URLRequest(url: url)
let dataSession = URLSession.shared
let dataTask = dataSession.dataTask(with: urlRequest) { (data, response, error) in
guard error == nil else{
print("ERROR found in networking call")
print(error!)
return
}
if data != nil{
completion(data!)
}else{
print("ERROR: did not receive data")
}
}
dataTask.resume()
}