2017-05-30 19 views
0

我有以下代碼,其中i,以請求激活與一些參數閉合差從轉換代碼時迅速2

 /* 
    Make an API request for activation 
    */ 
    var parameters: [String : AnyObject] = 
    [ 
     "code" : code as AnyObject, 
     "dob" : httpClient.dateOfBirthFormatter.string(from: dateOfBirth) as AnyObject, 
     "csr" : CSR as AnyObject, 
     "deviceType" : systemVersion as AnyObject, 
     "deviceModel" : deviceInfo as AnyObject 
    ] 
    if let deviceId = deviceId { 
     parameters["deviceId"] = deviceId as AnyObject? 
    } 

    httpClient.devicePOST("api/activation", parameters: parameters as AnyObject?, handleAuthorization: false, start: nil, retry: nil, 

     success: 
     { 
      (task: URLSessionDataTask, result: AnyObject?) -> Void in 

      guard let response = result as? [String : AnyObject] else { 
       failure(NSError(domain: "", code: 0, userInfo: ["reason" : "Invalid response"]))//change this later 
       return 
      } 

      guard let certificatePEM = response["certificate"] as? String else { 
       failure(NSError(domain: "", code: 0, userInfo: ["reason" : "Invalid response: certificate"]))//change this later 
       return 
      } 

      /* 
      Data is valid, activation is successful. Retrieve optional device identifier and call success handler 
      */ 
      var deviceId: UUID? 
      if let identifier = response["id"] as? String { 
       deviceId = UUID(uuidString: identifier) 
      } 

      success(certificatePEM, customerId, patientId, deviceId) 
     }, 

     failure: { 

      (task: URLSessionDataTask?, error: NSError) -> Void in 

      if let data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as? Data { 
       if let string = String(data: data, encoding: String.Encoding.ascii) { 
        print(string) 
       } 
      } 

      failure(error) 
     } 
    ) 
} 

的裝置POST函數被定義爲下面

typealias StartSessionTaskHandler = (URLSessionDataTask) -> Void 
typealias RetrySessionTaskHandler = (URLSessionDataTask) -> Void 
typealias SuccessResponseHandler = (URLSessionDataTask, AnyObject?) -> Void 
typealias FailureResponseHandler = (URLSessionDataTask?, NSError) -> Void 


func devicePOST(_ URLString: String, parameters: AnyObject?, handleAuthorization: Bool = true, start: StartSessionTaskHandler?, retry: RetrySessionTaskHandler?, success: SuccessResponseHandler?, failure: FailureResponseHandler?) { 

    guard let deviceService = deviceService else { 

     failure?(nil, NSError(domain: "", code: 0, userInfo: ["reason": "device service is unavailable"])) 
     return 
    } 

    POST(deviceService, URLString: URLString, parameters: parameters, handleAuthorization: handleAuthorization, start: start, retry: retry, success: success, failure: failure) 
} 

在POST函數,當我嘗試檢查閉包塊我看到這樣的事情

POST function closure description

Success closure description

所以塊沒有正確傳遞我猜。當我使用swift時,這工作得很好。有人能幫我解決這個問題。在此先感謝

回答

0

通過定義失敗和成功的塊來修復。

我定義的成功封口

success : { 
     (task:URLSessionDataTask,object: Any?) -> Void in 
     success(task,object) 
    }, failure: failure) 

這通常是什麼我也跟着到的數據傳回在堆棧