iOS: частичное применение перенаправителя для> помощника по реабстракции от @escaping @callee_unowned> @convention (блок) - PullRequest
0 голосов
/ 08 апреля 2020

Я заменил свою функцию sendRequest сертификатом закрепления. Я использовал это в нескольких местах в моем коде, и это работает, но когда я пытаюсь использовать это таким образом, это не работает. Я не понимаю, может быть, это тот факт, что он находится внутри функции "завершения"? Я действительно не знаю.

Сообщение об ошибке:

callback () -> () 0x0000000100253ac0 `частичное применение перенаправителя для помощника реабстрации thunk из @escaping @callee_unowned @convention (block) (@unowned Swift .Optional <__ C .NSData>, @unowned Swift.Optional <__ C .NSError>) -> () в @escaping @callee_guaranteed (@guaranteed Swift.Optional, @guaranteed Swift.Optional <__ * 1022) * .NSError>) -> () в

Новая функция (не работает):

    func sendRequest(_ request: URLRequest!, callback: @escaping (Data?, NSError?) -> Void)
    {
        let type:String = request.httpMethod! as String
        var url:String = request.url!.absoluteString
        let body:Data? = request.httpBody
        var parameters: [String:Any] = [:]

        if (body == nil)
        {
            parameters = [:]
        }
        else
        {
            parameters = NSKeyedUnarchiver.unarchiveObject(with: body!) as! [String : Any]
        }
        WebServiceManagement.sharedInstance.checkCertificate(url: url, parameters: parameters, type: type, completionHandler: { receivedData, errorMess in
            if ((receivedData) != nil)
            {
                var response: [String : Any]? = nil
                do {
                    response = try JSONSerialization.jsonObject(with: receivedData!, options: []) as? [String : Any]
                } catch {
                    callback(nil, error as NSError)
                }

                if !(errorMess == "") {
                    let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : errorMess])

                    callback(nil, error)
                    print("Error: Response strange format, not an NSArray and not a NSString!\n\(String(data: receivedData!, encoding: .utf8) ?? "")")
                }

                print("response success")

                if let response = response {
                    print("\(response)")
                    callback(receivedData, nil)
                }
            }
        })
    }

    func checkCertificate(url: String, parameters: [String : Any], type: String, completionHandler: @escaping (Data?, String) -> Void)
    {
     ...
    }

Старая функция (работает ):

func sendRequest(_ request: URLRequest!, callback: @escaping (Data?, NSError?) -> Void)
{
    NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main) { response, data, error in

        var httpStatus = 0
        if let httpResponse = response as? HTTPURLResponse
        {
            #if DEBUG
            print("Status code: \(httpResponse.statusCode)")
            #endif
            httpStatus = httpResponse.statusCode
        }
        if error != nil || httpStatus >= 400
        {
            let ERROR_CODE = httpStatus
            let error = NSError(domain: "Error Domain", code: ERROR_CODE, userInfo: nil)
            callback(data, error) 
        }
        else
        {
            callback(data, nil)
        }
    }
}

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...