如何解决为未知的枚举返回相同的原始值
我想为未知的枚举返回相同的值,
我在代码中定义了以下枚举,
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。