2017-05-09 7 views
0

私は、多くの場合、以下のような構成で自分自身を見つける:オプションで関数を呼び出すif-letに代わる代替手段はありますか?

let maybeValue: SomeType? = ... 
if let definitelyValue = maybeValue { 
    return someFunc(definitelyValue) 
} else { 
    return nil 
} 

someFuncが方法だったら、私は単純に(maybeValue?.someMethod)を、連鎖使用したい、と私の目標は、私が使用したいデフォルトを経由して非オプションだったらnil-coalescing演算子(maybeValue ?? defaultValue)ですが、上記のif-letはこれらのオプションよりもきれいです。

+0

あなたは、重複を探していましたか? – Sulthan

+0

@Sulthan私はしましたが、明らかに正しい言い回しではありませんでした!私はこれがマーティンの質問と重複していることに同意します。 – Sam

答えて

-2

最も一般的な機能プログラミングツールの1つを忘れていた:map

このような上記のルックスの整然とバージョン:someFuncはまた、オプションを返した場合はさておきとして

let maybeValue: SomeType? = ... 
return maybeValue.map(someFunc) 

、あなたはflatMapmapを置き換えます。

-2

あなたは、少なくとも別の変数を使う必要がなくなります_

let maybeValue: SomeType? = ... 
if let _ = maybeValue { 
    return someFunc(maybeValue!) 
} else { 
    return nil 
} 

を使用して中間値を無視することができます。

+0

なぜ賛成投票ですか?私は質問に答えて、わずかな利点を提供しています。 – iCyberPaul

+3

あなたがアンラップを強制する場合、 'もしlet 'のポイントは何ですか? – Desdenova

+0

これは安全であることを確認しました。 – iCyberPaul

0

地図またはflatMap(任意のタイプ)に使用できます。 flatMapは、値が存在する場合に限り、渡されたクロージャを基本的に評価します。ここで

はサンプルです、

let maybeValue: String? = "awesome swift" 

let val = maybeValue.flatMap { $0.uppercased() } 
関連する問題