微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Swift中获取密钥路径的编码密钥

如何解决在Swift中获取密钥路径的编码密钥

我所拥有的:具有不同属性的可编码结构。

我想要的是:一个函数,当在Json中对属性进行编码时,可以获取属性的确切名称。我认为最有前途的方法是使用Keypath,但我完全不知道如何以及是否有可能。谢谢!

解决方法

由于Codable类型的属性与其编码键之间没有1-1映射,因此无法立即执行此操作,因为可能存在某些属性不属于已编码取决于几个编码键的模型或属性。

但是,应该可以通过定义属性与其编码键之间的映射来实现目标。您使用KeyPath处在正确的轨道上,只需要定义一个接受KeyPath的函数,该函数的根类型是您的可编码模型,并从该函数返回编码密钥。

struct MyCodable: Codable {
    let id: Int
    let name: String

    // This property isn't part of the JSON
    var description: String {
        "\(id) \(name)"
    }

    enum CodingKeys: String,CodingKey {
        case name = "Name"
        case id = "identifier"
    }

    static func codingKey<Value>(for keyPath: KeyPath<MyCodable,Value>) -> String? {
        let codingKey: CodingKeys
        switch keyPath {
        case \MyCodable.id:
            codingKey = .id
        case \MyCodable.name:
            codingKey = .name
        default: // handle properties that aren't encoded
            return nil
        }
        return codingKey.rawValue
    }
}

MyCodable.codingKey(for: \.id)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。