我试图将模型/结构作为函数中的参数传递给另一个泛型结构/模型,这是我的代码
——比;函数
func getAPICallModelDecodable<T:Codable> (url:String,model:T,
success: @escaping (_ responseObject:T?)->Void,
failure: @escaping (_ error:String) -> Void ,
method:HTTPMethod = .get) {
print(type(of: model))
AF.request(url,method:method).responseDecodable(of: FetchAPI<T(Want to pass model parameter here)>.self) { respons in
print(respons)
switch respons.result {
case .success(let data):
if data.flag! {
success(data.data)
}
case .failure(let error):
failure(error.localizedDescription)
}
}
}
——比;FetchAPI Struct
struct FetchAPI<T:Codable>:Codable {
var flag: Bool?
var statusCode: Int?
var message: String?
var data: T?
enum CodingKeys: String, CodingKey {
case flag = "Flag"
case statusCode = "StatusCode"
case message = "Message"
case data = "Data"
}
}
模型参数可以是任何可编码的结构
目前你的函数getAPICallModelDecodable
是这样定义的,你必须传入一个类型t的模型。但是如果我理解正确的话,你只想传入(定义)类型t。
为此,您必须按如下方式更改函数:
func getAPICallModelDecodable<T:Codable> (url: String, type: T.Type,
success: @escaping (_ responseObject:T?)->Void,
failure: @escaping (_ error:String) -> Void ,
method:HTTPMethod = .get)
在函数体中,你可以简单地使用T,例如:
AF.request(url,method:method).responseDecodable(of: FetchAPI<T>.self)
函数调用看起来像这样:
getAPICallModelDecodable(url: ..., type: Model.self, ...)