繁体   English   中英

带有原始值的枚举,可编码

[英]Enum with Raw value, Codable

以下代码无法编译:

enum Occupation: String {
  case designer = "Designer"
  case engineer = "Engineer"
}

public struct SteveJobs: Codable {
  let name: String
  let occupation: Occupation
}

另一方面,它应该编译,因为Occupation表示为CodableString

为什么我不能在Codable结构中使用带有原始值的enum

特别是,为什么在这种情况下自动一致性不起作用。

错误

自动Codable合成是“选择加入”的,即您必须明确声明符合性:

enum Occupation: String, Codable { // <--- HERE
    case designer = "Designer"
    case engineer = "Engineer"
}

public struct SteveJobs: Codable {
    let name: String
    let occupation: Occupation
}

请参阅SE-0166 Swift 存档和序列化

通过采用这些协议,用户类型选择加入该系统。

自动HashableEquatable合成也是如此,比较请求合成在 SE-0185 中是可选的,其中列出了一些原因:

  • 选择加入的语法很自然; 今天在 Swift 中没有明确的类似物让类型选择退出功能。

  • 它要求用户对他们的类型所呈现的公共 API 做出有意识的决定。 类型不能意外地“落入”用户不希望它们的一致性; 最初不支持 Equatable 的类型可以在以后使用,但反过来是一个重大变化。

  • 通过检查其源代码可以清楚地看到类型支持的一致性; 对用户没有任何隐藏。

  • 我们减少了编译器完成的工作以及通过不合成不需要和未使用的一致性而生成的代码量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM