首页 > 解决方案 > 快速为通用类分配一些空值

问题描述

我正在使用通用默认模型解析 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 一样,通用数据类型接受什么?

标签: iosswiftxcodegenerics

解决方案


由于 T 符合您可以从协议Codable中使用相同的init(from:)Decodable

self.Data = try container.decodeIfPresent(T.self, forKey: .Data) ?? T(from: decoder)

这当然要求 T 可以创建一个“空”对象,如果不能,我相信您需要使用 optional


推荐阅读