Ich verwende AF und verwende den Delegaten, um die von meinem Server zurückgegebene Authentifizierungsanforderung zu erfassen.Problem mit Alamofire-Challenge-Delegat und Escaping-Closure
func connectGetRequest(_ url : URL){
let sessionManager = Alamofire.SessionManager.default
sessionManager.request(url).responseString { response in
print("Response String: \(response.result.value)")
}
let delegate: Alamofire.SessionDelegate = sessionManager.delegate
delegate.taskDidReceiveChallengeWithCompletion = { session, task, challenge, completionHander in
print("session is \(session), task is \(task) challenge is \(challenge.protectionSpace.authenticationMethod) and handler is \(completionHander)")
if(challenge.protectionSpace.authenticationMethod == "NSURLAuthenticationMethodServerTrust"){
completionHander(.performDefaultHandling,nil)
}else{
print("challenge type is \(challenge.protectionSpace.authenticationMethod)")
// Following line give me the error: "passing non-escaping parameter 'completionHander' to function expecting an @escaping closure"
self.handleAuthenticationforSession(challenge,completionHandler: completionHander)
}
}
delegate.dataTaskDidReceiveData = {session , task, data in
print("received data \(data)")
}
}
func handleAuthenticationforSession(_ challenge: URLAuthenticationChallenge,completionHandler: @escaping (Foundation.URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
Authhandler.handleChallenge(forURLSessionChallenge: challenge, completionHandler: completionHandler)
}
Problem habe ich:
Wenn ich den Code verwenden, oben, wie es ist, ich
Fehler: „Passing nicht entkommen Parameter 'completionHander' ein erwartet funktionieren @ escaping closure "
Wenn ich den Parameter der Funktion handleAuthenticationSession nicht entkommen lassen, bekomme ich:
func handleAuthenticationforSession(_ challenge: URLAuthenticationChallenge, completionHandler: (Foundation.URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { }
Fehler: „Closure Verwendung von nicht-entweichenden Parameter‚Vollendung‘erlauben kann es zu entkommen“
Auch handleChallenge Methode aus AuthHandler Klasse sieht (die ein Teil der obj-c Rahmen ist) wie folgt.
Also im Grunde bin ich in einem Deadlock fest, während ich Alamofire's Closure-Syntax verwende, um die Auth-Challenge zu delegieren.