【问题标题】:Convert concrete type having generic in class signature swift快速转换在类签名中具有泛型的具体类型
【发布时间】: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&lt;ApiOtherResult&gt;,它将失败。

        NetworkLayer.requestObject(router: router) { (result: NetworkResult<T>) in

        switch result {
        case .success(let value):
            if let apiResponse = value as? ApiResponse {
                }
        case .failure: break
        }

    }

【问题讨论】:

标签: ios swift generics codable


【解决方案1】:

我建议添加一个新协议

protocol StatusCodeProvider {
    var statusCode: String? { get }
}

将其作为要求添加到您的函数中,确保 NetworkResult&lt;T&gt; 中的 T 符合 StatusCodeProvider 并为您要请求的每个 T 添加符合性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2018-09-20
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多