假设我有一个这样的可编码类型:

struct MyCodable {
    let name: String
    let value: Int
}

据推测,编译器应该生成一组这样的编码键:

enum CodingKeys: String, CodingKey {
    case name
    case value
}

有没有办法查询这些编码键?

例如,我希望能够做到以下几点:

for key in MyCodable.CodkingKeys.allCases {
    print(key)
}

这可能吗?

推荐答案

CodingKeys个枚举生成为private个嵌套类型(有意),因此无法从类型外部访问它们.在您的示例中,如果该循环是在MyCodable类型之外编写的,则它将不起作用;但MyCodable does可以在内部访问其密钥.

要公开密钥,您需要使用不同的访问修饰符自己写出CodingKeys个枚举(您可以提供CodingKeys而不需要自己实现init(from:)/encode(to:)),或者在MyCodable上添加一个方法/属性,该方法/属性以适合您的用例的方式公开编码密钥集(例如var codingKeys: [CodingKey] { ... }).

Ios相关问答推荐

将数据传回VC时委托为空

当应用程序被杀死时是否还能获取位置?

如何更改 SwiftUI 弹出视图的大小?

Flutter Aging Person 自定义小部件

CoreML 不能并发(多线程)工作?

SwiftUI 动画:为什么容器视图在移动?我很难理解这种行为

在 SwiftUI 中使用 .rotation3DEffect 在视图之间翻转

List touch Tabbar 时 SwiftUI Tabbar 消失

如何在字段包含字典数组的firestore上查询?

禁用 UITextField 的自动更正

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为什么?

在 Swift 中追加字符串

标题为 UIImage 的导航栏

如何将自己项目中的类导入 Playground

以编程方式创建按钮并设置背景图像

自动布局:是什么创建了名为 UIView-Encapsulated-Layout-Width & Height 的约束?

如何在 Swift 中将新单元格插入 UITableView

如何进行键值观察并在 UIView 的框架上获取 KVO 回调?

NSURL 到带有 XCTest 的测试包中的文件路径

如何创建 Select 器数组