如何在Swift中为一把钥匙解码两种可能的类型?

如何在Swift中为一把钥匙解码两种可能的类型?,swift,codable,Swift,Codable,我有一个可编码的结构,用于解码传入的JSON。不幸的是,有时它的一个键值是字符串,有时是浮点值。我能够在下面的几个do/try/catch块中拼凑出它来工作,但是有更好的方法来处理这个问题吗 struct Project: Codable { public let version: Float init(from decoder: Decoder) throws { var decodedVersion: Float = 1.0 do {

我有一个可编码的结构,用于解码传入的JSON。不幸的是,有时它的一个键值是字符串,有时是浮点值。我能够在下面的几个do/try/catch块中拼凑出它来工作,但是有更好的方法来处理这个问题吗

struct Project: Codable {
    public let version: Float

    init(from decoder: Decoder) throws {
        var decodedVersion: Float = 1.0
        do {
            decodedVersion = try values.decode(Float.self, forKey: .version)
        } catch {
            do {
                if let inVersion = try Float(values.decode(String.self, forKey: .version)) {
                    decodedVersion = inVersion
                }
            } catch {
                throw error
            }
        }
        version = decodedVersion
    }
}

如果在JSON中,与键关联的值有时可以是
Float
,有时是
String
(除了在后端修复此错误,请参见链接重复问题中的公认答案,其中他处理字符串或整数。事实上,与您的解决方案非常类似。您也可以使用此要点非常好嘿,我使用此解决方案,我能够解析一个键的字符串和Int,并获得量子值。那么,我如何才能是否将QuantumValue转换为Int或String?@Rob嗨,我在我的answer@LucaAngeletti非常感谢!我认为这是一个非常合适的解决方案。很好。