转换具有类签名 swift 中的通用的具体类型



我有这样的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 }
}

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

相关内容

  • 没有找到相关文章

最新更新