swift - 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)
}
}
}
}
解决方案
尝试
self.apiCallKR(url: url, methods: methods, params: params, failAlert: failAlert, completionHandler: completionHandler)
推荐阅读
- python - 如何更改pyglet中的pixel_ratio?
- angular - 启用 ChangeDetectionStrategy.OnPush 后 UI 不更新
- java - 在Custom Adapter的getView函数中添加Buttons
- html - 单击时在两个活动选项卡之间来回切换 - jQuery
- angular - 如何从支付网站重定向回我的 ionic 应用程序
- ffmpeg - ffmpeg 将 mp4 视频转换为 rgba 流
- tensorflow2.0 - 如何使用 tensorflow 的 FFT?
- c - fprintf 的堆缓冲区溢出
- javascript - 在我的 express API 项目的其他文件夹中使用时,特定文件夹中的 sqlite3 sql 查询函数不起作用
- spring - 为什么大多数 Spring 应用程序的根级文件夹似乎总是遵循 com/company 命名约定?