网络单身人士

时间:2017-06-08 10:40:57

标签: swift architecture closures alamofire dispatch

目前,我通过单身人士管理我的网络问题:

class NetworkManager {

    public private(set) var queue: DispatchQueue = DispatchQueue(label: "project.dispatchgroups", attributes: .concurrent, target: .main)
    public private(set) var dispatchGroup: DispatchGroup = DispatchGroup()

    private static var sharedNetworkManager: NetworkManager = {
        let networkManager = NetworkManager()

        return networkManager
    }()

    private init() {}

    class func shared() -> NetworkManager {
        return sharedNetworkManager
    }

    public func getData() { 
        dispatchGroup.enter()

        queue.async(group: dispatchGroup) {
            Alamofire.request("https://example.com/endpoint").responseJSON { response in
                switch response.result {
                case .success(let value):
                    let json = JSON(value)
                    DataAndDispatchManager.shared().data = json["result"]
                case .failure(let error):
                    print("error: ",error)
                }

                self.dispatchGroup.leave()
            }
        }
    }
}

如您所见,请求完成后,我将返回的数据保存在另一个单例中(DataAndDispatchManager)......

当我使用我的网络管理员时:

NetworkManager.shared().getUser()
NetworkManager.shared().dispatchGroup.notify(queue: DispatchQueue.main) {
    let newData = DataAndDispatchManager.shared().data
}

我的方法有一个很大的缺点:

我正在使用dispatchGroup.notify通知自己请求何时完成,但可能有多个请求......所以它可能会变成一个错误。

我的问题:我应该实现一个闭包吗?

喜欢:直接从networkmanager返回数据并使用闭包调用此方法,所以我可以忽略dispatchGroup.notify部分?有人可以帮我解决这个问题吗?

0 个答案:

没有答案