为未知枚举返回相同的原始值



我想为未知枚举返回相同的值

我在我的代码中定义了以下枚举

public enum Airport: String {
case munich = "MUN_T01"
case sanFrancisco = "SANF_T02"
case singapore = "SP_T03"
public var name: String {
switch self {
case .munich:
return "Munich"
case .sanFrancisco:
return "San Francisco"
case .singapore:
return "Singapore"
}
}

每当我调用上面的枚举时,它都能很好地进行

var airportName = Airport(rawValue: "MUN_T01")
print("Airport Name: ", airportName)   // munich
print("Airport Code: ", airportName.rawValue)   // MUN_T01

现在我想对其他/未知的场景进行同样的报道,例如

var unknownAirportName = Airport(rawValue: "Test_T01")

当我打印unknownAirportName变量和时,应该打印unknownother

如果我打印unknownAirportName.rawValue,它应该打印Test_T01

我可以一直到其他/未知的情况,但我无法打印传递的相同值(Test_T01(。有什么帮助吗?

考虑将enum替换为原始值,再将enum转换为关联值,然后可以生成已知和未知的情况,例如:

public enum Airport {
case airport(name: String, code: String)
case unknown(code: String)

static let airports = [
Self.airport(name: "Munich", code: "MUN_T01"),
Self.airport(name: "San Francisco", code: "SANF_T02"),
Self.airport(name: "Singapore", code: "SP_T03")
]

var name: String {
if case let .airport(name, _) = self {
return name
}
return "Unknown"
}

var code: String {
switch self {
case let .airport(_, code):
return code
case let .unknown(code):
return code
}
}

static func airport(code: String) -> Airport {
if let item = Self.airports.first(where: { $0.code == code }) {
return item
}
return unknown(code: code)
}
}
let airport = Airport.airport(code: "MUN_T01")
print("Airport:", airport.name, airport.code) // Airport: Munich MUN_T01
let airport2 = Airport.airport(code: "NONE")
print("Airport:", airport2.name, airport2.code) // Airport: Unknown NONE

相关内容

最新更新