【发布时间】:2020-01-29 12:13:47
【问题描述】:
我为 API 响应创建了一个可解码的基础结构。
struct ResponseBaseModel<T: Decodable>: Decodable {
let status: Bool
let message: String
var result: T?
private enum CodingKeys: String, CodingKey {
case result, message, success,status,statusCode
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
if let result = try? values.decode(T.self, forKey: .result) {
self.result = result
}
status = try values.decode(Bool.self, forKey: .status)
message = try values.decode(String.self, forKey: .message)
}
}
// 这里是 API 响应
{
"status": true,
"statusCode": 200,
"message": "Theater list successfully",
"result": [
{
"id": 1,
"name": "Galaxy",
"picture": "https://ctdemo.workpc.online/kshatrainfotech/abol-app/public/storage/images/theaters/default.png",
"is_notify": false
}
]
}
这是我如何使用它来调用 API
apimanager.fetch { [weak self] (response: Result<ResponseBaseModel<[Theater]>, ApiError>) in
self?.handelResponse(response: response) { response in
switch response {
case .success(let theaterList):
self?.theaterViewModels = theaterList.map{ TheaterViewModel(theaterModel: $0)}
self?.responseHandler(.success(self!.theaterViewModels))
case .failure(let apiError):
self?.responseHandler(.failure(apiError))
}
}
}
但有些 API 没有结果如
{ “状态”:是的, “状态码”:200, “消息”:“api.DATA_UPDATED_SUCCESS” }
如何使用 ResponseBaseModel 模型处理上述响应。因为在使用 ResponseBaseModel 结构时我必须传递任何类型。
ResponseBaseModel<?>
我已经尝试过ResponseBaseModel<nil>,但没有成功。
【问题讨论】: