转换在 class 签名 swift 中具有泛型的具体类型

Convert concrete type having generic in class signature swift

我有一个struct这样的

struct ApiResponse<T: Codable>: Codable {
 let result: T?
 let statusCode: String?
}

我的代码中某处需要 statusCode。我对 result 不感兴趣,但 Swift 不允许我使用以下内容:

let apiResponse = value as? ApiResponse

它显示以下错误:

Generic parameter 'T' could not be inferred in cast to '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 }
}

将其作为一项要求添加到您的函数中,确保 NetworkResult<T> 中的 T 符合 StatusCodeProvider 并为您想要请求的每个 T 添加一致性。