Swift编码:可能有变量键吗?

时间:2018-01-18 03:40:01

标签: swift encoding

说我有一个结构:

struct Animal {
  var age: Int
  var type: String
}

我知道我可以定义自定义编码键,但我想要的是,当我将结构编码为JSON时,而不是:

{
  "age": 12
  "type": "dog"
}

我希望它是:

{
  "12": "dog"
}

但我不确定内置编码机制是否可行?

2 个答案:

答案 0 :(得分:0)

你可以为Json定制功能:

{"1": "dog"}

{
    1 = dog;
}

打印内容:

{{1}}
希望对你有所帮助。

答案 1 :(得分:0)

如果要使用Encodable协议执行此操作,则需要定义一个自定义键类型,以允许您可变地表示值,并自己编写encode(to:)

struct Animal : Encodable {
    var age: Int
    var type: String

    private struct CodingKeys : CodingKey {
        var stringValue: String
        var intValue: Int?

        init?(stringValue: String) {
           self.stringValue = stringValue
           self.intValue = nil
        }

        init?(intValue: Int) {
           self.stringValue = "\(intValue)"
           self.intValue = intValue
        }
    }

    public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(type, forKey: CodingKeys(intValue: age)!)
    }
}

我必须重申@Rob所说的,这是一个糟糕的想法,但如果这是你需要编码的格式,它仍然是可能的。