我使用JSON Placeholder post api在SWIFT中使用泛型和结果类型发出HTTP POST请求.以下是我用于请求和响应的可编码 struct .对于此接口,响应和请求都相同.
enum AddPostModel{
struct AddPostRequest: Codable{
let title: String
let body: String
let userId: String
let id: String
}
struct AddPostResponse: Codable{
let title: String
let body: String
let userId: String
let id: String
}
}
以下是我使用URLSession异步/等待、泛型和结果类型的POST请求代码.
func sendPostRequest<T: Codable>(url: String,responseType: T.Type,params: T) async -> Result<T,Error>{
do{
let session = URLSession(configuration: .default)
guard let url = URL(string: url) else{return .failure(HTTPError.invalidUrl) }
var request = URLRequest(url: url)
request.httpMethod = HTTPMethods.POST.method
let jsonData = try JSONEncoder().encode(params)
request.httpBody = jsonData
let (data,response) = try await session.data(for: request)
guard let urlResponse = response as? HTTPURLResponse , (200...299).contains(urlResponse.statusCode)
else{ return .failure(HTTPError.failedResponse)}
let jsonResponse = try JSONDecoder().decode(responseType.self, from: data)
return .success(jsonResponse)
}
catch{
return .failure(error)
}
}
在这里,我调用Post方法
func addPost(params: AddPostModel.AddPostRequest) async -> Result<AddPostModel.AddPostResponse,Error>{
return await service.sendPostRequest(url: Constant.BASE_URL + "/" + HomeEndPoints.posts.path, responseType: AddPostModel.AddPostResponse.self, params: params)
}
当我try 构建时,在sendPostRequest方法的params参数中得到以下错误
无法将类型
AddPostModel.AddPostRequest
的值转换为预期的参数类型AddPostModel.AddPostResponse