通用解码功能不工作(Swift)

通用解码功能不工作(Swift),swift,generics,decoder,decodable,jsondecoder,Swift,Generics,Decoder,Decodable,Jsondecoder,我试图创建一个通用的解码函数来解码我的两个不同的模型。我得到错误“参数类型'PrivateSchoolType.type'不符合预期的类型'Decodable'” 模型 调用函数 function getInfo() { // does not work => ERROR guard let schools = decode(jsonData: jsonData, using: PrivateSchoolModel) else { return } // does

我试图创建一个通用的解码函数来解码我的两个不同的模型。我得到错误“参数类型'PrivateSchoolType.type'不符合预期的类型'Decodable'”

模型

调用函数

function getInfo() {
    // does not work => ERROR
    guard let schools = decode(jsonData: jsonData, using: PrivateSchoolModel) else { return }

    // does work
    guard let schools = specificDecode()
}
特定解码功能(不起作用)

通用解码功能(不工作)

private func解码(jsonData:Data,使用模型:M)->[M]?{
做{
//这里是从网络请求接收到的数据响应
let decoder=JSONDecoder()
let schools=try decoder.decode([M].self,from:
jsonData)//解码JSON响应数据
返校
}捕获let parsinger错误{
打印(“错误”,parsingError)
}
归零
}

更改方法
签名
,如下所示

private func decode<M: Decodable>(jsonData: Data, using modelType: M.Type) -> M? {
    do {
        //here dataResponse received from a network request
        let decoder = JSONDecoder()
        let schools = try decoder.decode(modelType, from: jsonData) //Decode JSON Response Data
        return schools
    } catch let parsingError {
        print("Error", parsingError)
    }
    return nil
}

使用model:M
不应该是
使用解码器:M
?你能展示一下
公共学校模型
以及它与
私立学校模型
的关系吗?完美。如果你有时间,你能简单地解释一下你为什么要这么做,或者给我指一个资源吗?
private func specificDecode() -> [PrivateSchoolModel]? {
    guard let jsonData = getJSONData(from: .privateSchool) else { return }
        do {
            let decoder = JSONDecoder()
            let schools = try decoder.decode([PrivateSchoolModel].self, from:
            jsonData)
            return schools

        } catch let error {
            print("Error: \(error.localizedDescription)")
        }
        return nil
}
private func decode<M: Decodable>(jsonData: Data, using model: M) -> [M]? {
        do {
            //here dataResponse received from a network request
            let decoder = JSONDecoder()
            let schools = try decoder.decode([M].self, from:
                jsonData) //Decode JSON Response Data

            return schools
        } catch let parsingError {
            print("Error", parsingError)
        }

        return nil
    }
private func decode<M: Decodable>(jsonData: Data, using modelType: M.Type) -> M? {
    do {
        //here dataResponse received from a network request
        let decoder = JSONDecoder()
        let schools = try decoder.decode(modelType, from: jsonData) //Decode JSON Response Data
        return schools
    } catch let parsingError {
        print("Error", parsingError)
    }
    return nil
}
guard let schools = decode(jsonData: jsonData, using: [PublicSchoolModel].self) else { return }