ios - 快速为通用类分配一些空值
问题描述
我正在使用通用默认模型解析 API。以下是我的 BaseModel 类
class BaseModel<T : Codable>: Codable {
var StatusCode : Int
var StatusMessage : String
var Data : T
var ErrorMessage : String
}
我没有使用可选的来避免展开,而是为它提供了一些默认值和闲置的初始化程序。
required init(from decoder: Decoder) throws {
do {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.StatusCode = try container.decodeIfPresent(Int.self, forKey: .StatusCode) ?? -1
self.StatusMessage = try container.decodeIfPresent(String.self, forKey: .StatusMessage) ?? "no message"
self.Data = try container.decodeIfPresent(T.self, forKey: .Data) ??
self.ErrorMessage = try container.decodeIfPresent(String.self, forKey: .ErrorMessage) ?? "default error"
}
}
我将空字符串分配给 String 值,将 -1 分配给 Int 值。我在为 Generic 分配一些值时遇到了困难?像我将""
空字符串分配给 String's not a nit 一样,通用数据类型接受什么?
解决方案
由于 T 符合您可以从协议Codable
中使用相同的init(from:)
Decodable
self.Data = try container.decodeIfPresent(T.self, forKey: .Data) ?? T(from: decoder)
这当然要求 T 可以创建一个“空”对象,如果不能,我相信您需要使用 optional
推荐阅读
- google-analytics - 防止谷歌分析将 IP 地址传递给谷歌优化
- node.js - 使用 Muller 上传后未找到图像
- c# - ASP.NET Core 3 记录到输出窗口
- android - 使用 kotlin 的 android 复选框 recyclerview
- javascript - 在页面上强制加载 JS 脚本
- rust - Rust 宏:捕获完全匹配的标记
- javascript - Heroku 无法与后端对话
- sql - 我如何在 Athena 中正确使用 sql 'case when'
- c - 为什么我得到这个程序的分段错误?
- node.js - mongoose 传入的参数必须是 12 字节的单个字符串或 24 个十六进制字符的字符串