Swift 4-编码 - 解码时如何允许键的对象类型



我有一个Swift应用程序,我正在转换以使用代码协议(而不是Everflection,它发生了很大的变化,以至于我无法再使它起作用)。与App Server进行交易时,我的代码会生成一个" serverResponse"的对象,其中包含许多变量 - 其中一个是" responseObject" - 它可以是从用户到消息的任何数量的不同对象,或其他的。由于Codable默认情况下不使用" DecoDefpresent",因此我在某些交易期间遇到错误,并且不得不覆盖INIT(从解码器:解码器)进行防止。现在,我面临的挑战是要弄清楚如何将原始的JSON字符串完好无损以稍后通过调用方法解码到正确的对象类型,或者其他类似的修复程序。底线:我需要ResponseObject是灵活的,并允许我选择发送的任何类型的对象。

如果有人有任何建议,我会很感激。如果有帮助的话,我会很乐意分享代码,但是我认为这不是因为这个问题本质上是概念性的。

您可以做类似的事情: -

struct CustomAttribute: Codable {
var attributeCode: String?
var intValue: Int?
var stringValue: String?
var stringArrayValue: [String]?
enum CodingKeys: String, CodingKey {
    case attributeCode = "attribute_code"
    case intValue = "value"
    case stringValue
    case stringArrayValue
}
init(from decoder: Decoder) throws {
    let values = try decoder.container(keyedBy: CodingKeys.self)
    attributeCode = try values.decode(String.self, forKey: .attributeCode)
    if let string = try? values.decode(String.self, forKey: .intValue) {
        stringValue = string
    } else if let int = try? values.decode(Int.self, forKey: .intValue) {
        intValue = int
    } else if let intArray = try? values.decode([String].self, forKey: .intValue) {
        stringArrayValue = intArray
    }
}
}

这里的值可以是三种类型,我手动识别它是哪种类型。

相关内容

  • 没有找到相关文章

最新更新