Rob*_*ins 18 enums enumeration swift
我想将两个原始值关联到枚举实例(想象一个表示错误类型的枚举,我想要Error.Teapot一个code值为418 的Int类型属性,并将String属性设置为I'm a teapot.)
请注意原始值和关联值之间的差异- 我希望所有Teapot实例都有code418,我不希望每个Teapot实例都有唯一的关联值.
有没有比将计算属性添加到枚举的更好的方法switch,self以便查找适当的值?
jak*_*ken 17
你有几个选择。但它们都不涉及原始值。原始值并不是完成任务的正确工具。
我个人强烈建议不要在每个枚举案例中使用多个关联值。关联的值应该是显而易见的(因为它们没有参数/名称),并且有一个以上的值会严重混淆水。
也就是说,这是语言让你做的事情。如果这是您需要的东西,这也允许您对每个案例进行不同的定义。例子:
enum ErrorType {
case teapot(String, Int)
case skillet(UInt, [CGFloat])
}
Run Code Online (Sandbox Code Playgroud)
元组是 Swift 的一个很棒的特性,因为它们赋予你创建临时类型的能力。这意味着您可以在线定义它。甜的!
如果您的每个错误类型都将有一个代码和一个描述,那么您可以拥有一个计算info属性(希望有一个更好的名称?)。见下文:
enum ErrorType {
case teapot
case skillet
var info: (code: Int, description: String) {
switch self {
case .teapot:
return (418, "Hear me shout!")
case .skillet:
return (326, "I'm big and heavy.")
}
}
}
Run Code Online (Sandbox Code Playgroud)
调用它会容易得多,因为您可以使用美味、美味的点语法:
let errorCode = myErrorType.info.code