使用Facade Architecture从完成处理程序Swift中获取数据

时间:2018-08-25 05:25:11

标签: swift networking

我正在尝试创建一个像这样的架构:

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()
}

0 个答案:

没有答案