【发布时间】:2020-06-09 14:50:55
【问题描述】:
我有一个这样的struct
struct ApiResponse<T: Codable>: Codable {
let result: T?
let statusCode: String?
}
在我的代码中某处我需要statusCode。我对result 不感兴趣,但 Swift 不允许我使用以下内容:
let apiResponse = value as? ApiResponse
它显示以下错误:
无法在强制转换为“ApiResponse”时推断出通用参数“T”
这很明显,因为结构定义要求一些符合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
}
}
【问题讨论】:
-
检查Swift generic coercion misunderstanding。没有像
ApiResponse和ApiResponse<A> andApiResponse` 这样的类型是完全不相关的类型,即使A和B是相关的。
标签: ios swift generics codable