You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift错误:抛出函数无法转换为非抛出函数类型问题咨询

错误原因及解决方案:Invalid conversion from throwing function...

嘿,这个问题我之前也碰到过,很容易搞明白:

核心错误原因

你在闭包里直接调用了try JSONDecoder().decode(...)——这个decode方法是带throws关键字的,意味着它可能会抛出错误。但你传给EduappRestClient.request的闭包类型要求是(JSON?, Error?) -> Void,这个类型的闭包是不允许抛出任何错误的。Swift的类型系统很严格,它不允许把一个可能抛出错误的闭包,赋值给要求非抛出的闭包参数,这就是你看到这个报错的根本原因。

修复方案

你需要用do-catch块来捕获decode可能抛出的错误,把错误处理逻辑包裹起来,不让错误“逃逸”出闭包。修改后的代码如下:

EduappRestClient.request(with: URLString, method: .post, parameters: parameters) { (json, error) in
    guard error == nil, let json = json else {
        completion(nil, error)
        return
    }
    do {
        let result = try JSONDecoder().decode(QuestionModel.self, from: json)
        completion(result, nil)
    } catch let decodeError {
        // 将解码过程中出现的错误传递给外部的completion
        completion(nil, decodeError)
    }
}

额外提示

别忘了确认你的QuestionModel已经正确遵守了Decodable协议,并且模型的属性和JSON结构完全匹配,不然即使修复了这个类型错误,解码过程还是会抛出异常哦。

内容的提问来源于stack exchange,提问作者William Loke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:24:54