Syntaxe Swift pour bloc avec completionHandler... dans la méthode delegate
il s'agit d'une ride sur le problème du bloc d'achèvement nslsession régulier, que j'ai du mal à résoudre dans la syntaxe Swift. La méthode est le callback d'authentification delegate, qui est invoqué sur auth challenge; le développeur appelle le bloc completion avec NSURLCredential, NSError.
la méthode Objective-C ressemble à ceci:
-(void) provideUsernamePasswordForAuthChallenge:(NSURLAuthenticationChallenge *)authChallenge completionHandler:(void (^)(NSURLCredential *, NSError *))completionHandler{
NSURLCredential* credential = [NSURLCredential credentialWithUser:@"myname"
password:@"mypass"
persistence:NSURLCredentialPersistenceForSession];
completionHandler(credential, nil);
}
le plus proche que je pense avoir obtenu dans Swift, est celui-ci:
func provideUsernamePasswordForAuthChallenge(authChallenge: NSURLAuthenticationChallenge!, completionHandler:(() -> (NSURLCredential?, NSError?)) {
var cred = NSURLCredential(user: "myname", password: "mypass", persistence: NSURLCredentialPersistence.ForSession)
return (cred, nil)
})
Mais, c'est encore barfing. Tout recommandations?
3 réponses
- une fonction de vide est (Type1, Type2) ->()
- vous devez ajouter l'option ->() pour la méthode elle-même
Vous devez appeler completionHandler avec (cred, nil), pas de retour d'un n-uplet
func provideUsernamePasswordForAuthChallenge(authChallenge: NSURLAuthenticationChallenge!, completionHandler:(NSURLCredential?, NSError?)->()) ->() { var cred = NSURLCredential(user: "myname", password: "mypass", persistence: NSURLCredentialPersistence.ForSession) completionHandler(cred, nil) }
Ce code peut vous aider ->
AFAppDotNetAPIClient.sharedClient().GET("User", parameters:nil, success:{ (task : NSURLSessionDataTask!, JSON: AnyObject!) in
// within block....
}, failure:nil)
votre type est à l'envers-vous voulez que le gestionnaire d'achèvement prenne deux arguments et n'en renvoie aucun, mais vous l'avez défini comme une fonction qui ne prend aucun argument et renvoie une paire. Flop les deux côtés de la flèche.