问题描述
我想为未知的枚举返回相同的值,
我在代码中定义了以下枚举,
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")
,
当我打印unkNown
变量和
other
或unkNownAirportName
如果我打印unkNownAirportName.rawValue
,它应该打印Test_T01
我能够获得其他/未知情况,但是我无法打印所传递的相同值(Test_T01)。有帮助吗?
解决方法
考虑用原始值替换枚举,用关联值替换枚举,然后可以进行已知和未知的案例,例如:
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