Swift 查找completionHandler的声明

Swift 查找completionHandler的声明,swift,closures,swift2,alamofire,Swift,Closures,Swift2,Alamofire,我想调试Swift 2.0 Alamofire库中的SSL问题。我正在使用自定义Alamofire管理器和自定义ServerTrustPolicy设置,如下所示: static let manager: Manager = { let serverTrustPolicies: [String: ServerTrustPolicy] = [ "localhost": .PinCertificates( certificates: ServerTrus

我想调试Swift 2.0 Alamofire库中的SSL问题。我正在使用自定义Alamofire管理器和自定义ServerTrustPolicy设置,如下所示:

static let manager: Manager = {
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "localhost": .PinCertificates(
            certificates: ServerTrustPolicy.certificatesInBundle(),
            validateCertificateChain: false,
            validateHost: false
        )
//        "localhost": .DisableEvaluation
    ]

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders

   return Alamofire.Manager(configuration: configuration,
    serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
}()
我尝试了.PinCertificates和.DisableEvaluation。两人都给了我同样的错误

Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made."
UserInfo={
  NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x60c00004d980>,
  NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?,
  _kCFStreamErrorDomainKey=3, 
  _kCFStreamErrorCodeKey=-9802, 
  NSErrorPeerCertificateChainKey=<CFArray 0x6060001498a0 [0x10bb3c7b0]>{
    type = immutable, count = 1, values = (
     0 : <cert(0x61600006ed80) s: localhost i: localhost>
    )}, 
   NSUnderlyingError=0x6040000ad750 {
     Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)"
     UserInfo={
       _kCFStreamPropertySSLClientCertificateState=0, 
       kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x60c00004d980>,
       _kCFNetworkCFStreamSSLErrorOriginalValue=-9802,
       _kCFStreamErrorDomainKey=3,
       _kCFStreamErrorCodeKey=-9802,
       kCFStreamPropertySSLPeerCertificates=<CFArray 0x6060001498a0 [0x10bb3c7b0]>{
         type = immutable, count = 1, values = (
           0 : <cert(0x61600006ed80) s: localhost i: localhost>
         )}
     }
   },
   NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made.,
   NSErrorFailingURLKey=https://localhost:3000/auth/requestToken?auth_appId=d018ccd505db2cb1d5aacabb03fc2f3a,
   NSErrorFailingURLStringKey=https://localhost:3000/auth/requestToken?auth_appId=d018ccd505db2cb1d5aacabb03fc2f3a,
   NSErrorClientCertificateStateKey=0
}
我将其缩小到一个方法,从中调用completionHandler。在调用闭包之前,一切都很好,所以我想知道这个completionHandler实际上做了什么

public func URLSession(
    session: NSURLSession,
    didReceiveChallenge challenge: NSURLAuthenticationChallenge,
    completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void))
{
    // some other stuff but
    // everything fine so far

    completionHandler(disposition, credential)
}
我认为URLSession方法是从调度队列或类似的地方调用的

因此,我的问题是:如何找到作为completionHandler参数传递给URLSession方法的闭包?

-我假设您这里的问题不是这个特定的方法,而是completionHandler在Swift中的工作方式

-这里的completionHandler是一个闭包,它反过来充当回调函数

-在Swift中,回调由闭包和委托处理

-让我用一个小例子来澄清这个困惑

问题:

假设我有一个方法要调用,所以我将调用该方法,在得到响应后,我需要在屏幕或控制台上显示结果

解决方案:

要调用的方法: 内部函数sumUpvalOne:Int,valTwo:Int,completionHandler:sum:Int->Void { 让加法=valOne+valTwo completionHandlersum:添加 }

呼叫代码: 总结{

}


-调用summp方法将完成两个整数相加的工作,然后将总和返回到completionHandler中,并将其公开给调用者。

您应该能够进入闭包。或者只是检查这个方法在哪里被调用。你的问题不是很清楚。您是否使用自定义服务器信任策略?默认情况下,Alamofire使用苹果的默认服务器信任评估。如果你能说得更具体一点,帮助会容易得多。我用更多信息更新了我的问题:
public func URLSession(
    session: NSURLSession,
    didReceiveChallenge challenge: NSURLAuthenticationChallenge,
    completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void))
{
    // some other stuff but
    // everything fine so far

    completionHandler(disposition, credential)
}
      (sum) -> Void in
       print(sum) // OR print it in display