【发布时间】:2023-02-23 01:14:35
【问题描述】:
我的项目中有一些代码如下所示:
static func getUrlFromPageType(_ type: PageType) -> UrlConfig? {
switch type {
case .helpScreen:
return .helpScreen
case .contact:
return .contact
case .termsAndConditions:
return .termsAndConditions
// etc
}
}
如此继续下去,还有 20 多个案例。除了两个例外(映射到 nil),返回值的“名称”始终与输入相同,但类型不同。
理想情况下,您可能想在这里使用比枚举更明智的东西,但出于这个问题的目的,假设这是不可能的。
我的问题是:我可以自动从一个枚举映射到另一个枚举,避免 switch 语句吗?
【问题讨论】:
-
Swift 的类型系统大多是名义上的。即使两个枚举具有相同的结构,但就类型系统而言,它们是完全不相关的。您可以使用与 Joakim 相同的支持原始值在它们之间桥接,但除此之外,这些只是恰好具有相同名称的完全不相关的值。宏将来可能会帮助解决这个问题。尽管它回避了一个问题:如果这些具有严格的一对一关系,那么是否有理由首先拥有两个不同的枚举?
-
为什么你首先有两个枚举?
-
@Alexander 我也同意这样做并没有多大意义。也许最好有某种轻量级实例来处理这两种情况;但不幸的是,出于某些原因,我现在有点被枚举困住了。
标签: swift