比如说,我经常看到这样的事情,

                "Length": 0,
                "TestDate": {
                    "$date": "2023-09-20T05:00:00.0000000Z"
                },
                "Weight": 0,
                "Height": 0,

这很管用,

    struct DollarDate: Codable {
        let date: Date
        
        private enum CodingKeys: String, CodingKey {
            case date = "$date"
        }
    }

然而,如今有了SWIFT,通常就没有必要大惊小怪地编码了.

例如,如果密钥是SWIFT关键字,您只需...

struct Draft: Codable {
    
    let id: String
    var `case`: Case?   // no problem these days, just use backtick
}

对于json中的"$Date"这样的问题键名称,是否有类似的即时解决方案?

推荐答案

我想你的问题是,你是否可以做一些等同于:

struct Foo {
    let `$bar`: Int          // “Cannot declare entity named '$bar'; the '$' prefix is reserved for implicitly-synthesized declarations”
}

简短的回答是,不,你不能.


有关标识符的规则,请参见The Swift Programming Language: Lexical Structure: Identifiers.具体地说,领先的$在SWIFT中有独特的用途,在声明我们自己的标识符时是明确禁止的.正如前面提到的文档所说:

编译器为具有属性包装投影的属性合成以美元符号($)开头的标识符.您的代码可以与这些标识符交互,但不能使用该前缀声明标识符.

在SWIFT代码库中,CodingKeys是将JSON键映射到语法上有效的东西的正确方式(或者,更一般地说,任何时候我们想要将JSON键映射到任何标识符,即使只是为了保持样式的一致性).

Ios相关问答推荐

在SwiftUI中使用系统图像和色调创建圆形按钮

IFrame内容拒绝仅在iOS浏览器上加载-即使发布了内容-安全-策略(CSP)框架-祖先指令

分配给指针会通过 class_addMethod 导致 EXC_BAD_ACCESS

BezierPath 中绘制图像形状轮廓的算法(Canny 边缘检测器)

当虚拟对象附加到其网格时,如何刷新创建 ARView 的 SwiftUI UIViewRepresentable?

_SKStoreProductParameterAdNetworkSourceIdentifier未定义符号

在 Swift 中,对象如何被准确地从内存中移除?

Flutter Aging Person 自定义小部件

错误:无法根据成员environmentObject推断上下文基础

Text() 正在添加额外的前导尾随填充 SwiftUI

通过函数使用 Gesture 时,键入任何视图不能符合视图

在 SwiftUI 中打开 PDF

我们可以在 Swift 中将 struct 中的 Codable 键设置为不区分大小写吗

在 Swift 中按下返回键时在文本字段之间切换

Swift 错误:在其自己的初始值中使用的变量

构建失败:ld:重复符号 _OBJC_CLASS_$_Algebra5FirstViewController

是否可以在 iOS 9 上让您的 iPad 应用退出多任务处理?

iOS:如何从 URL 调试新启动应用程序

UINavigationBar - 以编程方式设置标题?

如何找到 UILabel 的实际行数?