ios - 用于序列化 key 的结构或枚举?

标签 ios swift

Apple 在 Lister 演示中更喜欢使用结构而不是枚举来声明序列化 key 有什么原因吗?可能有一些好处吗?

例如:

private struct SerializationKeys {
    static let text = "text"
    static let uuid = "uuid"
    static let completed = "completed"
    ...
    //duplicated key!
    static let descriptionText = "text"
}

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

有了枚举,我们就没有这样的问题了:

    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
}

很高兴听到一些对此的想法。

最佳答案

有时我也会做同样的事情,这就是原因。

有了结构,我的值就直接可用了:所以,如果 SerializationKeys 是一个结构,那么 SerializationKeys.text 就是一个字符串。

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

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

关于ios - 用于序列化 key 的结构或枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649220/

相关文章:

swift - Switch 语句循环 Swift 中的所有情况

swift - swift 中的类型转换元组

ios - UIPageControl 选择点并转到该页面

ios - 是否可以使用 Game Center 创建日/周/月排行榜?

ios - 通过 Cocoapods 集成 Apptentive iOS SDK 时出现 undefined symbol 错误

ios - 从 float 中获取字符串而不对其值进行四舍五入

ios - 根据动态 UILabel 自动调整 ContainerView 的宽度

swift - 从收藏 View 自动播放下一个音频文件

ios - 如何更改 Objective-C 中 UITableViewCell 中先前按下的 UIButton 标签?

ios - CFBundleGetFunctionPointerForName 和 dlsym 对于导出函数返回 NULL