这可以在Swift中创建一个元组枚举吗?
我想构建类似的东西:
enum ErrorCode: (Int, String) {
case Generic_Error = (0, "Unknown")
case DB_Error = (909, "Database")
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译......有没有办法获得类似的结果?
mat*_*ttt 55
Swift枚举不能将元组作为原始值类型.
替代方法包括存储代码并从中导出描述:
enum ErrorCode: Int, CustomStringConvertible {
case Generic = 0
case DB = 909
var description: String {
switch self {
case .Generic:
return "Unknown"
case .DB:
return "Database"
}
}
}
Run Code Online (Sandbox Code Playgroud)
...或者在枚举案例中存储代码和描述的关联值:
enum Error {
case Generic(Int, String)
case DB(Int, String)
}
Run Code Online (Sandbox Code Playgroud)
如果你只是在寻找不变的价值观,那么@ matt的建议也可以在其中进行组织struct.
mat*_*att 42
这取决于你所说的"相似".我所做的是使用具有静态常量属性的Struct:
struct Trouble {
static let Generic_Error = (0, "Unknown")
static let DB_Error = (909, "Database")
}
Run Code Online (Sandbox Code Playgroud)
现在Trouble.Generic_Error可以在整个代码中使用.
小智 30
您可以符合RawRepresentable并(Int, String)用作Self.RawValue关联类型.
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
hol*_*lex 17
你可以做这样的事情,也许:
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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
你以后可以做这件事:
let errorCode: ErrorCode = ErrorCode.Generic_Error;
if (errorCode.values().code == 0) {
// do the business here...
}
Run Code Online (Sandbox Code Playgroud)
Au *_*Ris 13
创建enum并添加var元组类型(String, String).
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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
let myType = SomeType.type1
let typeName = myType.typeNameAndDescription.name
let typeDescription = myType.typeNameAndDescription.description
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17039 次 |
| 最近记录: |