从“(_, _) throws -> ()”类型的抛出函数到非抛出函数类型“(JSON?, Error?) -> Void”的无效转换

Invalid conversion from throwing function of type '(_, _) throws -> ()' to non-throwing function type '(JSON?, Error?) -> Void'

我遇到了

的错误
        EduappRestClient.request(with: URLString, method: .post, parameters: parameters) { (json, error) in
        guard error == nil, let json = json else {
            completion(nil, error)
            return
        }
        let result = try JSONDecoder().decode(QuestionModel.self, from: json)
        completion(result, nil)
    }

这是一个 API 我正在打电话,我的完整源代码可以在以下位置找到 https://github.com/WilliamLoke/quizApp

我可以知道这行错误代码是什么问题吗?

由于预计此块不会抛出错误,因此您需要将抛出调用包装在 do catch 块中:

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 error {
        completion(nil, error)
    }
}

我遇到了同样的问题,解决方法很简单:你可以使用 try? 而不是 try

guard let result = try? JSONDecoder().decode(QuestionModel.self, from: json)