我在我的应用程序中使用协议时遇到问题,我创建了一个控件来管理api调用,并将响应返回给委托视图控制器。但我关注的是例如:
我在ViewController1并请求api获取管理员配置文件,并将api委托分配给自我意义(APIClient.delegate = self
):ViewController1将收到响应,因为它实现了api客户端的委托以获得响应回来
现在,在回复get admin个人资料之前。我去了ViewController2并分配了APIClient.delegate = self
并在这里请求了另一个api调用。现在获得了get admin profile的响应,但它将被丢弃,因为委托不等于执行请求的ViewController1或者没有实现处理配置文件响应的方法!
以下是我的一些代码:
@objc protocol APIClientDelegate : NSObjectProtocol {
@objc optional func getAdminProfileFinishedWithResponse(_ dictionary:NSMutableDictionary)
@objc optional func getAdminProfileFailedWithError(_ error:NSError)
}
@objc class APIClient: APIClientDelegate {
weak var delegate : APIClientDelegate?
func getAdminProfile(_ postDictionary:NSMutableDictionary){
self.get(getUserProfilePath, parameters: postDictionary, progress: nil, success: { (task, response) in
if self.delegate != nil && self.delegate!.responds(to: #selector(APIClientDelegate.getAdminProfileFinishedWithResponse(_:))){
self.delegate!.getAdminProfileFinishedWithResponse!((response as! NSDictionary ).mutableCopy() as! NSMutableDictionary)
}
}) { (task, error) in
if self.delegate != nil && self.delegate!.responds(to: #selector(APIClientDelegate.getAdminProfileFailedWithError(_:))){
self.delegate!.getAdminProfileFailedWithError!(error as NSError)
}
}
}
}
如果您明白我的意思,如果ViewController1请求api,请确保如果代理更改,则响应不会丢失。想知道怎么动态地解决它,在后台......等等?
答案 0 :(得分:0)
为了达到你想要的效果,你每次进行API调用时都会创建一个APIClient
对象的对象。
e.g。
let objClient = APIClient()
objClient.delegate = self
objClient.getAdminProfile(.....
通过这种方式,将包含每个调用的引用,并且API调用不会重叠。