-1
不工作我试图让我的代码dispatchgroup工作DispatchGroup斯威夫特3
let dispatchQueue:DispatchQueue = DispatchQueue(label: "com.dispatchgroup", attributes: .concurrent, target: .main)
var dispatchGroup:DispatchGroup = DispatchGroup()
func renewLoginIfRequired()->String{
self.dispatchGroup.enter()
dispatchQueue.async(group:dispatchGroup){
self.authorizeApplication(completionHandler: {
self.dispatchGroup.leave()
})
}
}
self.dispatchGroup.wait() // Stops execution here
return "Login Success"
}
上面的代码在self.dispatchGroup.wait停止执行()。没有运气 各地self.authorizeApplication以及我不知道我做错了什么: 我曾尝试相同的代码,而不dispatchQueue.async(dispatchGroup组)。这里有一点要提的是,self.authorizeApplication将使该功能
编辑1中的异步Web服务请求:
为了更详细的问题。我将从此方法返回会话令牌(字符串)。 这里是如果我使用通知或关闭它调用这个
func processPOSTRequest(_ urlString : String, isAnAuthReq:Bool = false, requestObject: Data?, onSuccess: @escaping (NSDictionary?, NSError?) -> Void, onFailure: @escaping (Data?, NSError?) -> Void){
let manager = AFHTTPSessionManager()
let url = URL(string: urlString);
var request = URLRequest(url: url!);
if !isAnAuthReq{
let token = self.renewLoginIfRequired() //-- Get new token before processing a webservice request
request.setValue(token, forHTTPHeaderField: "Authorization")
}
print("processing URl : "+urlString)
request.httpMethod="POST";
request.httpBody = requestObject
request.setValue("application/json; charset=utf-8", forHTTPHeaderField:"Content-Type")
request.setValue("application/json; charset=utf-8", forHTTPHeaderField:"Accept")
let task = manager.dataTask(with: request, uploadProgress: nil, downloadProgress: nil, completionHandler:{ data, response, error in
if(error == nil){
if let responseCode = (data as? HTTPURLResponse)?.statusCode{
if responseCode != 200 || !((response as? [String: Any])?["success"] as? Bool)!{
let errorResponse = NSError()
print("Response received for URL: "+urlString)
onFailure(nil, errorResponse.addItemsToUserInfo(newUserInfo: ["errorCode":String(responseCode)]))
}
else{
onSuccess(response as! NSDictionary?, nil)
}
}
}
else{
onFailure(nil, error as NSError?)
}
})
task.resume()
}
功能。我怎样才能做到这一点?我已经尝试了他们两个
不要这样做。使用完成处理程序。 – vadian
在我看来,你尝试在这里实现信号量。为什么不使用'DispatchSemaphore'来达到你的目的? –
您是否尝试过使用'dispatchGroup.notify()'而不是'dispatchGroup.wait()'? –