首页 > 解决方案 > Swift 4 - 如何在 typealias 的完成处理程序帮助下获得结果(字典和数据)

问题描述

我对带有 typealias 的完成处理程序有点困惑

我创建了一个具有结果、状态、数据的类型别名。这是我创建它的方式:

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

我有一个带有 URL 、 Param 、失败警报和完成处理程序的方法。我已将类型别名传递给完成处理程序。这是方法

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”类型的值(又名“((Dictionary, Bool, Data) -> ()).Type'

如何将 completionHandler(KRResult.result, KRResult.Status,response.data!)传递给成功类型别名

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)
                }
}
}
}

标签: swiftalamofireresponsecompletionhandlertype-alias

解决方案


尝试

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



推荐阅读