Ios 带completionHandler的块的Swift语法。。。在委托方法中
这是常规NSURLSession完成块问题的一个折痕,我花了很长时间才将其解析为Swift语法。该方法是身份验证委托回调,在auth质询时调用;开发人员使用NSURLCredential、NSError调用完成块 Objective-C方法如下所示:Ios 带completionHandler的块的Swift语法。。。在委托方法中,ios,objective-c,closures,block,swift,Ios,Objective C,Closures,Block,Swift,这是常规NSURLSession完成块问题的一个折痕,我花了很长时间才将其解析为Swift语法。该方法是身份验证委托回调,在auth质询时调用;开发人员使用NSURLCredential、NSError调用完成块 Objective-C方法如下所示: -(void) provideUsernamePasswordForAuthChallenge:(NSURLAuthenticationChallenge *)authChallenge completionHandler:(void (^)(NS
-(void) provideUsernamePasswordForAuthChallenge:(NSURLAuthenticationChallenge *)authChallenge completionHandler:(void (^)(NSURLCredential *, NSError *))completionHandler{
NSURLCredential* credential = [NSURLCredential credentialWithUser:@"myname"
password:@"mypass"
persistence:NSURLCredentialPersistenceForSession];
completionHandler(credential, nil);
}
我认为我在斯威夫特最接近的是:
func provideUsernamePasswordForAuthChallenge(authChallenge: NSURLAuthenticationChallenge!, completionHandler:(() -> (NSURLCredential?, NSError?)) {
var cred = NSURLCredential(user: "myname", password: "mypass", persistence: NSURLCredentialPersistence.ForSession)
return (cred, nil)
})
但是,它仍然在呕吐。有什么建议吗?您的类型是向后的-您希望完成处理程序接受两个参数并不返回任何参数,但您已将其定义为不接受参数并返回一对参数的函数。把箭的两边弹下来
func provideUsernamePasswordForAuthChallenge(authChallenge: NSURLAuthenticationChallenge!, completionHandler:(NSURLCredential?, NSError?)->()) ->() {
var cred =
NSURLCredential(user: "myname", password: "mypass",
persistence: NSURLCredentialPersistence.ForSession)
completionHandler(cred, nil)
}
AFAppDotNetAPIClient.sharedClient().GET("User", parameters:nil, success:{ (task : NSURLSessionDataTask!, JSON: AnyObject!) in
// within block....
}, failure:nil)
您得到的错误是什么?这可以得到更进一步的清理:(1)方法本身不需要返回类型,因为它是无效的(因此您可以在方法签名中省略
->()
),以及(2)因为对于NSURLCredential
而言,持久性
参数的类型是已知的,您只需提供要使用的选项,.ForSession