我想为未知枚举返回相同的值
我在我的代码中定义了以下枚举
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
变量和时,应该打印unknown
或other
如果我打印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