2017-12-28 32 views
1

私はSwiftを初めて使用しています。私は次のようなコードを書いていますが、これはもっと素敵な方法で書き直すことができます。コードフラグメントを最適化することは可能ですか?

let defaultCountry: MyEnum = .... 
    let countryStr: String? = .... 

    // How can I optimize the fragment below? 
    let country: MyEnum 
    if let countryStr = countryStr { 
     country = MyEnum(rawValue: countryStr) ?? defaultCountry 
    } 
    else { 
     country = defaultCountry 
    } 

理想的に1行で、誰がどのように良いことをするためにアイデアを持っていますか:

あり
let country = ??? 

答えて

1

Optional<String>countryStrflatMap(_:)を使用できます。

let country = countryStr.flatMap({ MyEnum(rawValue: $0) }) ?? defaultCountry 
2

あなたはそれを持って1行で、単にデフォルトの列挙値からrawValueを使用します。

let country = MyEnum(rawValue: countryStr ?? defaultCountry.rawValue) ?? defaultCountry 

その他のアプローチ:

var country = defaultCountry 
if let validCountryStr = countryStr, let validCountryEnum = MyEnum(rawValue: validCountryStr) { 
    country = validCountryEnum 
} 
関連する問題