gpt4 book ai didi

ios - 手动解码 Codable 类的非 Codable 属性

转载 作者:行者123 更新时间:2023-11-28 05:40:55 27 4
gpt4 key购买 nike

ClassA 符合 Cadable 并具有一系列属性。其中之一是不符合 Codable 的已经存在的非常复杂的 ClassB 的属性。我可以手动解码 Codable 类的非 Codable 属性吗?

struct ClassA: Codable {

let title: String?
let subtitle: String?
let property: ClassB?

enum CodingKeys: String, CodingKey {
case title
case subtitle
case property
}

required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)

title = try container.decode(String.self, forKey: .title)
subtitle = try container.decode(String.self, forKey: .subtitle)
let JSONString = ?
property = ClassB.initWith(JSONString: JSONString)
}

class ClassB: NSObject {

// Already existing very complex ClassB implemenatation...
}

我得到错误:

Type 'ClassA' does not conform to protocol 'Encodable'

最佳答案

是的,你可以。

错误是您在 ClassA 中缺少 func encode(to encoder: Encoder) throwsCodable = Encodable & Decodable,因此它也在尝试找到一种对 ClassA 进行编码的方法。 ClassB 不可编码,因此它不能自动执行,而且您也没有告诉它如何手动执行。

如果您不需要对 ClassA 实例进行编码,只需将其设为 Decodable。否则实现缺少的 encode 函数。

或者只是投入工作并使 ClassB 也可编码。您可以使用扩展名在事后添加它。如果您也不想这样做,我使用的解决方法是在 ClassA 中声明一个小型私有(private)可编码结构,例如 struct ClassBInfo: Codable。使用它来获取您需要的信息,然后读取其属性以初始化 ClassB

关于ios - 手动解码 Codable 类的非 Codable 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com