Avatar
if式を採用した場合に発生するコンテキストの問題として、if文の中のreturnが何を指すのかという問題が発生する。 1. if式の返り値として値を採用し、if式から脱出する 2. 関数の返り値として値を採用し、関数から脱出する。この時if式自体の返り値はNever型になる。 1を採用した場合、シンプルなif文を使った早期returnが表現できなくなるか、或いはネストしてif elseで表現することを強制される。 例 if myArray.isEmpty { return -1 } if elseで表現することを強制される、ということはそれは即ちif式での早期脱出の数だけ、本文のネストが深くなるということであり、望ましいものではない。 2を採用した場合、if式の中でif式の値として早期脱出を表現することは不可能になる。 例 let a = if myCond { if myArray.isEmpty { return -1 } // この行は関数の返り値になり、aとして利用することは出来なくなる ... } これらの1,2双方の問題を解決しようとした場合、ラベル付returnのような複雑な仕様が必要となるが、それは望ましくない というのがSwiftでif/switch/for/whileが式として提供されない一般の理由、と考えて良いと思います。 個人的にはラベル付returnよりはResultBuilderの方がシンプルなんじゃないかな、という感想。 (edited)