gpt4 book ai didi

ios - 为 KeyPath 获取特定的 CodingKey

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:13 24 4
gpt4 key购买 nike

考虑以下对象:

struct User: Codable {
let id: Int
let email: String
let name: String
}

是否可以获得特定的 CodingKey对于给定的 KeyPath

let key = \User.name.codingKey  // would be equal to string: "name"

最佳答案

使用 Swift 4,我不认为你可以自动从相应的 KeyPath 对象中检索一个 CodingKey,但你总是可以破解你的绕过它;)

例如,在sameUser类型的Swift源文件中,添加如下extension:

fileprivate extension User {
static func codingKey(for keyPath: PartialKeyPath<User>) -> CodingKey {
switch keyPath {
case \User.id: return CodingKeys.id
case \User.email: return CodingKeys.email
case \User.name: return CodingKeys.name
default: fatalError("Unexpected User key path: \(keyPath)")
}
}
}

然后在受约束的 KeyPath 父类(super class)中实现所需的 codingKey API:

extension PartialKeyPath where Root == User {
var codingKey: CodingKey {
return User.codingKey(for: self)
}
}

最后,用法紧跟您的代码:

let name: CodingKey = (\User.name).codingKey
print("\(name)") // prints "name"

这可能是一个有些乏味且容易出错的解决方案,但是,如果您只需要对少数类型使用此功能,我认为它是完全可行的;)

警告。当然,鉴于 CodingKeys enum private 可见性,这种 hack 不适用于外部定义的类型。 (例如,对于 Swift 标准库定义的所有 Codable 类型。)

关于ios - 为 KeyPath 获取特定的 CodingKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46511964/

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