Swift 4 - Как я могу получить результат (словарь и данные) с помощью обработчика завершения typealias - PullRequest
0 голосов
/ 07 февраля 2019

Я немного запутался в обработчиках завершения с typealias

Я создал typealias , который имеет результат, статус, данные. Вот как я его создаю:

typealias Success = (_ result:Dictionary<String, Any>, _ Status:Bool,_ Data:Data) -> Void

У меня есть метод с URL, Param, предупреждением об ошибке и обработчиком завершения. Я передал typealias обработчику завершения.Вот метод

private func callApi(apiURL:ApiURL, param:[String: Any]?, failAlert:Bool, completionHandler: @escaping Success) {

        var url = "\(AppBaseUrl)\(apiURL.rawValue)"

        var params:[String:Any] = [:]
        var methods:HTTPMethod = .get
        if param != nil {
            params = param!
            methods = .post
            self.printParam(param: params)
        }
        self.apiCallKR(url: url, methods: methods, params: params, failAlert: failAlert, completionHandler: Success)
    }

Я получил такую ​​ошибку

Невозможно преобразовать значение типа 'Success.Type' (aka '((Dictionary, Bool, Data) -> ()). Тип '

Как передать завершениеHandler (KRResult.result, KRResult.Status, response.data!) к успеху Typealias

func apiCallKR(url:String, methods:HTTPMethod, params:[String:Any],  failAlert:Bool, completionHandler: @escaping Success) {
         let header = ["User-ID":Extensions.getUserID(),"Auth-Key":Extensions.getToken()]

        Alamofire.request(url, method: methods, parameters: params, encoding: URLEncoding.default, headers: header).responseJSON { (response) in
            KRLog("Response: \n\(response)")

            let statusCode = response.response?.statusCode
            switch response.result {
            case .success:
                if statusCode == 200, let json = response.result.value as? [String: Any] {
                   AppDetail.stopIndicator()
                    let KRResult =  self.jsonResponseValidation(sender: json, failAlert: failAlert)
                    completionHandler(KRResult.result, KRResult.Status,response.data!)

                }else {
                    completionHandler([:], false, response.data!)
                    AppDetail.stopIndicator()
                    AppDetail.showToast(toastText: AlertText(.textAlertJsonFormatMismatch), type: .fail, handler: nil)
                }
}
}
}

1 Ответ

0 голосов
/ 07 февраля 2019

попробуй

self.apiCallKR(url: url, methods: methods, params: params, failAlert: failAlert, completionHandler: completionHandler) 


...