我有这样的struct
struct ApiResponse<T: Codable>: Codable {
let result: T?
let statusCode: String?
}
在我的代码中的某个地方,我需要
statusCode
。我对result
不感兴趣,但是Swift不允许我使用以下代码:let apiResponse = value as? ApiResponse
它显示以下错误:
无法将通用参数“T”强制转换为“ApiResponse”
这很明显,因为结构定义要求一些符合
Codable
的结构,但同时我不能使用一种类型,因为它将对其他类型失败。例如
let apiResponse = value as? ApiResponse<ApiResult>
对于一种类型的响应将是正确的,但是如果我有
ApiResponse<ApiOtherResult>
,它将失败。 NetworkLayer.requestObject(router: router) { (result: NetworkResult<T>) in
switch result {
case .success(let value):
if let apiResponse = value as? ApiResponse {
}
case .failure: break
}
}
最佳答案
我建议添加一个新协议
protocol StatusCodeProvider {
var statusCode: String? { get }
}
将其作为功能中的要求添加,以确保
T
中的NetworkResult<T>
符合StatusCodeProvider
并为要请求的每个T
添加符合性。