我正在尝试创建一个像这样的架构:
VC调用Facade实例方法以启动网络请求。
Facade将字符串传递到Networking实例方法中,该方法返回一个Data
对象。该Data
对象被传递给另一个名为Parse的类,以进行解析和对象创建。
我正在寻找一种非常简单的方法来将数据从完成处理程序中取出,但最终只能调用链中无处可去的方法。到目前为止,我基本上可以通过在Networking Instance方法中实现完成处理程序将数据传递回Facade。当我调用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()
}