你能在Swift中转换枚举类型吗?

qqrboqgw  于 2023-02-28  发布在  Swift
关注(0)|答案(2)|浏览(146)

我在项目中有一些代码,如下所示:

static func getUrlFromPageType(_ type: PageType) -> UrlConfig? {
    switch type {
    case .helpScreen:
        return .helpScreen
    case .contact:
        return .contact
    case .termsAndConditions:
        return .termsAndConditions
    // etc
    }
}

接下来的20种情况都是这样,除了两个例外(Map到nil),返回值的"name"总是和输入值相同,但是类型不同。
理想情况下,您可能希望在这里使用比枚举更明智的方法,但对于这个问题,假设这是不可能的。
我的问题是:我可以自动地从一个枚举Map到另一个枚举,避免switch语句吗?

b09cbbtk

b09cbbtk1#

如果两个枚举都具有String类型的原始值,或者您可以将它们更改为具有String类型的原始值,那么这将非常简单

enum PageType: String {
    case helpScreen
    case contact
    case termsAndConditions
}

enum UrlConfig: String {
    case helpScreen
    case contact
    case termsAndConditions
}

func getUrlFromPageType(_ type: PageType) -> UrlConfig? {
    UrlConfig(rawValue: type.rawValue)
}
rqmkfv5c

rqmkfv5c2#

我的问题是:我可以自动地从一个枚举Map到另一个枚举,避免switch语句吗?
不。我们在应用程序中做了 * 很多 * 这样的操作,用于有 * 很多 * 案例的枚举,而且没有办法绕过它:你只需要有一个巨大的开关,将第一个枚举的每一个caseMap到第二个枚举的相应case上--尽管如何进行Map是非常明显的,因为这些case自始至终都有相同的名称。
我们的约定是给每个需要转换成另一个枚举的枚举一个执行转换的方法。

enum ConfettiAnimation: String {
        case airborne = "Airborne"
        case anniesBunny = "AnniesBunny"
        // ... 20 more cases

        func toEarningsAnimation() -> EarningsAnimation? {
            switch self {
            case .airborne:
                return .airborne
            case .anniesBunny:
                return .anniesBunny
            // ... 20 more cases
            }
        }
    }

基本上你只需要像超人穿裤子一样做--一次一条腿,就像其他人一样。

相关问题