2017-10-13 73 views
0

是否可以在切換字符串時測試某個特定枚舉類型是否可以由rawValue初始化,而不是使用if let?Swift - 從switch語句中的字符串初始化枚舉

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 
} 

謝謝!

回答

0

如果我理解正確,您可以使用零合併運算符而不是if let

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

,你想,你可以添加其他許多可能的枚舉初始化。它會按順序評估並返回第一個不是nil。如果全部爲nil,則返回nil。因此,它與一系列if-let-else具有完全相同的行爲。

+0

絕對更好,不知道它可以連續使用。 –