Struct或Enum用于序列化键?

San*_*ndr 12 ios swift

是否有任何理由为什么Apple更喜欢在Lister演示中使用结构来声明序列化的键?可能会有一些好处吗?

例如:

private struct SerializationKeys {
    static let text = "text"
    static let uuid = "uuid"
    static let completed = "completed"
    ...
    //duplicated key!
    static let descriptionText = "text"
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们可能有重复的密钥.对于小对象来说这不是一个大问题(不要忘记复制/粘贴:)),但对于具有数十个字段的大对象,这可能是一个真正的问题.

使用枚举我们没有这样的问题:

    private enum SerializationKeys : String {
    case text = "text"
    case uuid = "uuid"
    case completed = "completed"
    //...
    case descriptionText = "text"
    //here we have compiler's warning: Raw value for enum case is not unique
}
Run Code Online (Sandbox Code Playgroud)

很高兴听到一些关于此的想法.

mat*_*att 6

我有时做同样的事情,这就是原因.

使用struct,我的值可以直接使用:因此,如果SerializationKeys是一个struct,那么它SerializationKeys.text是一个字符串.

但是对于枚举,枚举就是价值.如果SerializationKeys是一个枚举,那么SerializationKeys.text不是一个字符串; 这是一个枚举.如果我想要字符串,我必须明确地获取它,作为枚举rawValue.有时候,这太疯狂了.另一方面,如果它是可以接受的,或者如果有另一个原因导致它成为一个好的枚举,那么很好,我将使用枚举.

换句话说:如果这只是某些常量的美化命名空间,那么具有静态成员的结构似乎最简单.枚举用于切换,即需要以几种可能状态中的一种存在的东西.