如何在swift中传递函数参数给泛型结构



我试图将模型/结构作为函数中的参数传递给另一个泛型结构/模型,这是我的代码

——比;函数

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, ...)

最新更新