目前,我通过单身人士管理我的网络问题:
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
部分?有人可以帮我解决这个问题吗?