我创建了 APINetworkManagerAll,在这里我创建了 serviceCall 并在 viewcontroller 中调用它。这里 postGenericCall2() 被调用,响应也来了,但是我给定的
param
值没有来,而是说 nil 为什么?我在 postmn 中传递相同的值然后响应正常吗?我哪里错了?请指导我。
struct RequestObjectAll {
var params: [String: Any]? = nil
var method: HTTPMethod
var urlPath: String
var isTokenNeeded: Bool
var isLoaderNeed: Bool = false
var isErrorNeed: Bool = false
var vc: UIViewController?
}
class APINetworkManagerAll: NSObject {
static let sharedInstance = APINetworkManagerAll()
fileprivate override init() {
super.init()
}
func serviceCall<T: Decodable>(requestObject: RequestObjectAll, completion: @escaping (Result<T, Error>) -> Void) {
if requestObject.isLoaderNeed {
requestObject.vc?.showLoader()
}
guard let url = URL(string: requestObject.urlPath) else {
if requestObject.isLoaderNeed {
requestObject.vc?.hideLoader()
}
completion(.failure(NetworkError.invalidURL))
return
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = requestObject.method.rawValue
guard let httpBody = try? JSONSerialization.data(withJSONObject: requestObject.params ?? ["" : ""], options: []) else {
return
}
urlRequest.httpBody = httpBody
let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in
if requestObject.isLoaderNeed {
requestObject.vc?.hideLoader()
}
if let error = error {
completion(.failure(error))
return
}
if let data = data {
do {
let response = try JSONDecoder().decode(T.self, from: data)
completion(.success(response))
} catch {
completion(.failure(error))
}
} else {
let error = NSError(domain: "YourDomain", code: 0, userInfo: [NSLocalizedDescriptionKey: "No data received"])
completion(.failure(error))
}
}
task.resume()
}
}
func postGenericCall2(){
let param = ["name": "john",
"job": "AAA"
]
let requestObject = RequestObjectAll(
params: param,
method: .post,
urlPath: "https://reqres.in/api/users",
isTokenNeeded: false,
isLoaderNeed: true,
vc: self
)
APINetworkManagerAll.sharedInstance.serviceCall(requestObject: requestObject) { (result: Result<PostGenModelSmall, Error>) in
switch result {
case .success(let response):
// Handle a successful response
print("result of post service call.....: \(response)")
case .failure(let error):
// Handle the error
print("Error decoding JSON: \(error)")
}
}
}
struct PostGenModelSmall: Codable {
let name: String
let job: String
let id: String
let createdAt: String
}
错误:
解码 JSON 时出错:keyNotFound(CodingKeys(stringValue: "name", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "没有与键关联的值 CodingKeys(stringValue: "name", intValue: nil) )(“名称”)。”,underlyingError:nil))