Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于序列化键的结构或枚举?_Ios_Swift - Fatal编程技术网

Ios 用于序列化键的结构或枚举?

Ios 用于序列化键的结构或枚举?,ios,swift,Ios,Swift,在Lister演示中,Apple为什么更喜欢使用结构而不是枚举来声明用于序列化的键呢?可能有一些好处吗 例如: private struct SerializationKeys { static let text = "text" static let uuid = "uuid" static let completed = "completed" ... //duplicated key! static let descriptionText =

在Lister演示中,Apple为什么更喜欢使用结构而不是枚举来声明用于序列化的键呢?可能有一些好处吗

例如:

private struct SerializationKeys {
    static let text = "text"
    static let uuid = "uuid"
    static let completed = "completed"
    ...
    //duplicated key!
    static let descriptionText = "text"
}
在这里,我们可能有潜在的重复键。对于小对象(不要忘记复制/粘贴:)来说,这不是一个大问题,但对于具有数十个字段的大对象来说,这可能是一个真正的问题

对于enum,我们没有这样的问题:

    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
}

我很高兴听到一些关于这方面的想法。

苹果选择结构的原因似乎纯粹是语义上的<代码>序列化键。descriptionText是一个属性<代码>序列化键。DescriptionText是一种类型。使用类型作为键在语义上有点奇怪


True,在此特定实例中,
SerializationKey.descriptionContext
类型恰好有一个与之关联的“原始”值。但据我所知,原始值实际上只打算用作C枚举之间的某种“桥接层”。用它来做这样的钥匙有点像黑客

我有时也做同样的事情,原因如下

对于结构,我的值直接可用:因此,如果SerializationKeys是一个结构,那么
SerializationKeys.text
是一个字符串

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


换句话说:如果这只是一些常量的美化名称空间,那么带有静态成员的结构似乎最简单。枚举用于交换机,即需要以多种可能状态中的一种状态存在的对象。

SerializationKey枚举是一种类型,而descriptionText是一个具有该类型的实例?仅在声明枚举时定义所有实例。使用枚举成员作为键并不奇怪。