Swift中的元组的枚举

这是可能创build一个元组的枚举在Swift中?

我想build立一些像:

enum ErrorCode: (Int, String) { case Generic_Error = (0, "Unknown") case DB_Error = (909, "Database") } 

但它不编译…有没有办法获得类似的结果?

这取决于你的意思是“相似”。 我所做的是使用具有静态常量属性的Struct:

 struct Trouble { static let Generic_Error = (0, "Unknown") static let DB_Error = (909, "Database") } 

现在像Trouble.Generic_Error这样的东西可以在你的代码中使用。

Swift枚举不能将Tuples作为原始值types。

替代方法包括存储代码并从中得出描述:

 enum ErrorCode: Int, CustomStringConvertible { case Generic = 0 case DB = 909 var description: String { switch self { case .Generic: return "Unknown" case .DB: return "Database" } } } 

…或在枚举案例本身中存储代码和描述的相关值:

 enum Error { case Generic(Int, String) case DB(Int, String) } 

如果你只是在寻找不变的价值观,那么@亚特在一个struct中组织它们的build议也是可行的。

你可以做这样的事情,也许:

 enum ErrorCode { case Generic_Error case DB_Error func values() -> (code: Int!, description: String?)! { switch self { case .Generic_Error: return (0, "Unknown") case .DB_Error: return (909, "Database") } } } 

你可以稍后做这样的事情:

 let errorCode: ErrorCode = ErrorCode.Generic_Error; if (errorCode.values().code == 0) { // do the business here... } 

您可以遵循RawRepresentable并使用(Int, String)作为Self.RawValue关联的types。

 enum ErrorCode: RawRepresentable { case Generic_Error case DB_Error var rawValue: (Int, String) { switch self { case .Generic_Error: return (0, "Unknown") case .DB_Error: return (909, "Database") } } init?(rawValue: (Int, String)) { switch rawValue { case (0, "Unknown"): self = .Generic_Error case (909, "Database"): self = .DB_Error default: return nil } } } 

类似于@holex的解决scheme,但是可以使用var来代替函数。

 enum SomeType { case type1 case type2 case type3 var typeNameAndDescription: (name: String, description: String) { switch self { case .type1: return ("type1 name", "type1 description") case .type2: return ("type2 name", "type2 description") case .type3: return ("type3 name", "type3 description") } } } 

然后:

 let myType = SomeType.type1 let typeName = myType.typeNameAndDescription.name let typeDescription = myType.typeNameAndDescription.description