Swift - 在switch语句中从字符串初始化枚举

时间:2017-10-13 13:13:21

标签: ios swift enums switch-statement

是否可以测试在切换字符串时rawValue是否可以初始化特定的枚举类型,而不是使用if?

static func getCurrency(from code: String) -> Currency? {
    if let fiatCurrency = Fiat(rawValue: code) {
        return fiatCurrency
    } else if let cryptoCurrency = Blockchain(rawValue: code) {
        return cryptoCurrency
    } else {
        return nil
    }
}

这可能类似于类型转换,其中currency符合我的货币协议:

switch currency {
case let fiatCurrency as Fiat:
    return getFiatFormatting(for: value, fiatCurrency: fiatCurrency)
case let blockchain as Blockchain:
    return getCryptoFormatting(for: value, blockchain: blockchain)
case let token as Token:
    return getTokenFormatting(for: value, token: token)
default:
    return nil
}

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解你想要的是什么,你可以使用nil合并算子而不是if let

static func getCurrency(from code: String) -> Currency? { return Fiat(rawValue: code) ?? Blockchain(rawValue: code) }

您可以根据需要添加任意其他可能的枚举初始化。它会按顺序进行评估,并返回第一个不是nil的内容。如果全部为nil,则返回nil。因此,它与一系列if-let-else具有完全相同的行为。